Занесение файлов в базу, и их вывод.

Статус
В этой теме нельзя размещать новые ответы.

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:
/**************************
/   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);
Выгрузка файла прошла успешна, картинка выглядит нормально.

Пожалуйста прокомментируйте, что сделано не так, и как было бы лучше- правильнее?

Примечание: я в курсе, что хранение файлов в базе тормозит систему и еще много чего, поэтому пожалуйста не нужно ответов не по сути.
 

cDLEON

Онанист РНРСlub
Не нужно хранить файлы в базе данных.
Это тупая, ни кому не нужная, идея.
 

ukrsonic

Новичок
Автор оригинала: cDLEON
Не нужно хранить файлы в базе данных.
Это тупая, ни кому не нужная, идея.
Я хочу знать как это делается. Зачит идея уже комуто нужная.
Странная логика у тебя, если тебе самому не надо значит и другим тоже? Я к тебе в ученики не нанимался.

-~{}~ 17.01.08 18:19:

Автор оригинала: trashcan
2ukrsonic
И заметь, это ответ по сути :)
Я ожидал, что тут начнет собираться разное бычье, которое будет умничать о смыслах в жизни. Не хотите помочь советом, не заставляю.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ukrsonic
не стОит с первого-же дня хамить в форуме.
Скажете, пожалуйста, почему нужно именно в БД хранить файлы? На это есть веская причина?
 

cDLEON

Онанист РНРСlub
ukrsonic
Странная логика у тебя. Вместо того, что бы грузить данные с диска, ты их сначала читаешь (С ДИСКА!!!), потом передаёшь через сокет, потом получаешь, потом выводишь.
Мало того, не заботясь хватит ли памяти что бы считать файл в переменную.
ЗЫ. "Бычьё" в этой теме только одно. И оно начало этот топик.
 

ukrsonic

Новичок
Автор оригинала: cDLEON
Странная логика у тебя. Вместо того, что бы грузить данные с диска, ты их сначала читаешь (С ДИСКА!!!), потом передаёшь через сокет, потом получаешь, потом выводишь.
Я привел два разных скрипта , один показывает "Как добавить фотку в базу" и второй "Как фотку выгрузить когда он потребуется", они не запускаются одновременно.

Автор оригинала: cDLEON
Мало того, не заботясь хватит ли памяти что бы считать файл в переменную.
Вот это я и хотел узнать от специалистов, что я делаю не так?
Как можно сделать проверку?

Автор оригинала: cDLEON
ЗЫ. "Бычьё" в этой теме только одно. И оно начало этот топик.
Извините.
Вы меня сможете понять, если Вам будут засорять Ваш топик разным мусором типа: ....это тупая тема..., ... тупой никому не нужный вопрос ..., ... вопрос не по существу... и т.д.

Я привел пример кода, постарался как смог. Ожидал услышать корректировки и советы по коду, а тут понеслась старая песня,... тупая идея и т.д.
Если бы вопрос стоял так "Это тупая идея или нет?", эти ответы были бы по существу.

-~{}~ 17.01.08 19:01:

Автор оригинала: Mr_Max
Что именно из этого не понятно?
http://dev.mysql.com/doc/refman/5.1/en/string-type-overview.html
Оооо, спасибо Макс!!! значит можно пихать файлы в поле размером

TINYBLOB, TINYTEXT 256 байт
BLOB, TEXT 64 кБ
MEDIUMBLOB, MEDIUMTEXT 4 МБ
LONGBLOB, LONGTEXT 2 ГБ

получается?

-~{}~ 17.01.08 19:02:

Автор оригинала: Mr_Max
ukrsonic
не стОит с первого-же дня хамить в форуме.
Скажете, пожалуйста, почему нужно именно в БД хранить файлы? На это есть веская причина?
Веской причины нет, меня интересует просто реализация самого процесса. Как это делается? Для собственного опыта.
 

Pigmeich

Новичок
cDLEON
древняя мудрость: не спорь с дураком - сам им станешь.

ukrsonic
Сейчас все похоже на спор богача и бедняка как правильно питаться.

Бедняка интересует как и где вообще эту еду достать. А богач разумно говорит, что что попало и в спешку есть нельзя - можно язву получить. Проблемы достать еду у богача нет, а если появиться он её сможет решить минут за 15. Потому сытый голодного не разумеет.

Что делать? Стать богатым, конечно.
 

ukrsonic

Новичок
Автор оригинала: Pigmeich
cDLEON
древняя мудрость: не спорь с дураком - сам им станешь.

ukrsonic
Сейчас все похоже на спор богача и бедняка как правильно питаться.

Бедняка интересует как и где вообще эту еду достать. А богач разумно говорит, что что попало и в спешку есть нельзя - можно язву получить. Проблемы достать еду у богача нет, а если появиться он её сможет решить минут за 15. Потому сытый голодного не разумеет.

Что делать? Стать богатым, конечно.
Проходил мимо и проходил бы дальше. За чем гадить то?
 

Фанат

oncle terrible
Команда форума
Батюшки. С ним ещё и разговаривают =)

ukrsonic, свободен.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху