ukrsonic
Новичок
Занесение файлов в базу, и их вывод.
Здравствуйте,
есть ли у кого готовый PHP сценарий безопасного ввода и вывода файлов из базы данных (БД) MySQL?
Очень хотелось бы увидеть хоть один граммотный пример, чтобы знать к чему стремиться. Может кто видел статью нормальную по этому делу?
Я с базой работаю не так давно, поэтому большим опытом не располагаю, есть только предположения, как это делается.
Думаю примерно так:
Это упрощенный вариант, без всяких дополнительных проверок и т.п.
Создадим простенькую табличку
CREATE TABLE images (
image_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
image_data MEDIUMBLOB NOT NULL ,
PRIMARY KEY ( image_id )
);
в табице будут храниться тумбнаилы, думаю MEDIUMBLOB должно хватить... хотя может стоило SMALLBLOB писать?
Подскажите плиз сколько байт вмещает SMALLBLOB и MEDIUMBLOB? В мануале написано не понятно както.
Ок, теперь пишем простенький сценарий считывания файла и запихиваем его в базу, если все ок, тогда файл с файловой системы сервака можем удалить.
Теперь произведем выгрузку файла из базы данных.
Выгрузка файла прошла успешна, картинка выглядит нормально.
Пожалуйста прокомментируйте, что сделано не так, и как было бы лучше- правильнее?
Примечание: я в курсе, что хранение файлов в базе тормозит систему и еще много чего, поэтому пожалуйста не нужно ответов не по сути.
Здравствуйте,
есть ли у кого готовый PHP сценарий безопасного ввода и вывода файлов из базы данных (БД) MySQL?
Очень хотелось бы увидеть хоть один граммотный пример, чтобы знать к чему стремиться. Может кто видел статью нормальную по этому делу?
Я с базой работаю не так давно, поэтому большим опытом не располагаю, есть только предположения, как это делается.
Думаю примерно так:
Это упрощенный вариант, без всяких дополнительных проверок и т.п.
Создадим простенькую табличку
CREATE TABLE images (
image_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
image_data MEDIUMBLOB NOT NULL ,
PRIMARY KEY ( image_id )
);
в табице будут храниться тумбнаилы, думаю MEDIUMBLOB должно хватить... хотя может стоило SMALLBLOB писать?
Подскажите плиз сколько байт вмещает SMALLBLOB и MEDIUMBLOB? В мануале написано не понятно както.
Ок, теперь пишем простенький сценарий считывания файла и запихиваем его в базу, если все ок, тогда файл с файловой системы сервака можем удалить.
PHP:
/**************************
/ Add file to Data Base
/**************************
/* read file */
$fp=fopen($root.$file_name, "r");
$file_data=fread($fp,filesize($root.$file_name));
fclose($fp);
/* load file data to db */
mysql_pconnect($hostname,$username,$password) or die ("Could not connect: " . mysql_error());
mysql_select_db("$dbName") or die ("Database not found!");
$query = "INSERT INTO images ( image_id, image_data ) VALUES ('NULL', '".addslashes($file_data)."' )";
$result = mysql_query($query) or die (mysql_error());
$num_results = mysql_affected_rows();
if(empty($num_results)){
$_log = 'ERROR: Some shit happened!';
exit;
} else {
$_log = 'SUCCESS: File added to database!';
unlink($root.$file_name); // kill file from server
}
PHP:
/****************************
/ Read file from Data Base
/****************************
/* unload file data from db */
mysql_pconnect($hostname,$username,$password) or die ("Could not connect: " . mysql_error());
mysql_select_db("$dbName") or die ("Database not found!");
$query = "SELECT * FROM images WHERE image_id=".$image_id;
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
/* write file from unloaded data */
$new_file = $row['image_id'].'.jpg';
$fw = fopen($root.$new_file, "w");
fputs($fw, stripslashes($row['image_data']));
fclose($fw);
Пожалуйста прокомментируйте, что сделано не так, и как было бы лучше- правильнее?
Примечание: я в курсе, что хранение файлов в базе тормозит систему и еще много чего, поэтому пожалуйста не нужно ответов не по сути.