запись картинки в бд

ALEX_SHEPA

Guest
запись картинки в бд

собственно код:
PHP:
<?  
$fp=fopen('file.gif','rb');  
$upload = fread($fp,filesize($fp));  
fclose($fp);  
$upload = mysql_escape_string($upload);  
mysql_query("INSERT into myTable values('$upload')");  
?>
В таблице тип BLOB, вывожу так:
PHP:
<? 
header("Content-type: image/gif"); 
echo $image; 
?>
Но выводить не хочет, что не так?
 

SiMM

Новичок
Прям так и записываешь (т.е. коннект к базе делать, конечно же, не обязательно)? Прям так и выводишь (т.е. вытаскивать данные из базы, конечно же, тоже не нужно)?
PHP FAQ: Ничего не работает! Что делать???
PS: и вообще, что за навязчивая идея хранить картинки в базах? Тем более, если работать с PHP ещё толком не научились?
 

ALEX_SHEPA

Guest
2SiMM->
я привел, кусочек кода, ну зачем мне расписывать как я подключаюсь к бд, как я выбираю?
Вот видишь ты ведь заметил и мог понять что всё это я специально не вынес в данный код, а вынес только смысл как я записываю и вывожу, а насчёт того что хранить картинки в бд не хорошо я знаю, но сохранять файлы на сервере я не могу!!!
 

agx

Программер :-)
Приведи подробности на счет вывода.
После чтения из БД ты данные как-нибудь обрабатываешь?
 

untied

Сдвинутый новичок
Прежде чем записывать картинку в базу, нужно её данные за-escape-ить. В SQL символы \' \0 \0xFF являются специальными, поэтому для с данными нужно проделать операцию mysql_escape_string()
(дело в том, что в данных GIF-файла запросто могут встретиться запрещенные символы, типа апострофа).

Хорошо так же проверить результат выполнения запроса INSERT, и если результат нулевой, вызвать ф-ию mysql_error()

Кроме того, есть проблема с upload-ом на некоторых серверах, где установлен русский Apache. При закачке файла Apache автоматом применяет перекодировку (делает GIF русским :D ), и от этого данные портятся. Если дело в этом, нужно запретить перекодировку на лету соответствующей директивой Apache.
 

agx

Программер :-)
Так он ведь не далает аплоад, он применяет fopen() локального файла.
И он использует mysql_escape_string().

-~{}~ 29.11.04 16:04:

Надо подробности извлечения данных. Наверное, там что-то не так.
 

Фанат

oncle terrible
Команда форума
agx
откуда такая уверенность, что именно в извлечении а не в помещении?
 

SiMM

Новичок
Автор оригинала: ALEX_SHEPA
я привел, кусочек кода, ну зачем мне расписывать как я подключаюсь к бд, как я выбираю?
Потому что надпись "продвинутый новичек" мне ни о чём не говорит - если бы у меня возникла подобная проблема - я бы занялся отладкой, а не побежал бы в форум. Если бы и прибежал - указал бы всё, что перепробовал, выводимые и получаемые скриптом данные, ошибки и т.п., а не написал бы глупость типа "выводить не хочет" - это даже не описание проблемы.
а насчёт того что хранить картинки в бд не хорошо я знаю, но сохранять файлы на сервере я не могу!!!
А вот не верю я тебе ;)
 

ALEX_SHEPA

Guest
при извлечении делаю так:
PHP:
<?
$select = mysql_query("SELECT img from myTable") or die(mysql_error());
$image = mysql_result($select,0);
$image = stripslashes($image);

header("Content-type: image/gif"); 
echo $image;
?>
-~{}~ 29.11.04 16:30:

поискал на форуме и возможно нашёл правильное решение:
надо воспользоваться ф-ией imagecreatefromstring()
 

SiMM

Новичок
Автор оригинала: ALEX_SHEPA
при извлечении делаю так:
$image = stripslashes($image);
Да где вы такой ахинеи-то учитались? PHP FAQ: Кавычки. \"Надоедливые наклонные\", слеши, экранирование кавычек.
PS: хотя конечно к фразе "выводить не хочет" это замечание отношения не имеет - как я уже сказал - это не описание проблемы.
 

Gas

может по одной?
поискал на форуме и возможно нашёл правильное решение:
надо воспользоваться ф-ией imagecreatefromstring()
Это неправильное решение.
Ссылку на правильное решение тебе дал SiMM во втором посте.
 

Фанат

oncle terrible
Команда форума
я бы сказал - оно совершенно бессмысленное решение :)
 

agx

Программер :-)
Ну что же вы все на него так наезжаете!
Конечно, хранить картинки в бд - немного странная идея, но все же поля blob для чего-то существуют!
Вот на по этой ссылке есть пример загрузки картинки их БД
http://ru.php.net/manual/ru/function.imagecreatefromstring.php
 

Gas

может по одной?
Наезжают не потому что хранить картинки в базе плохо.
А потому что человек не может отладить _свой_ же скрипт или воспользоваться поиском.

p.s. я тоже не наежаю :)
 

SiMM

Новичок
Автор оригинала: agx
Вот на по этой ссылке есть пример загрузки картинки их БД
http://ru.php.net/manual/ru/function.imagecreatefromstring.php
Как уже заметил Фанат, это абсолютно бессмысленно - вы хоть сами поняли, чего посоветовали?
И, кстати, я тоже не наезжаю - а всего лишь пытаюсь обратить внимание вопрошающего на то, что он делает - программирование - это не применение магических заклинаний невпопад - а использование нужных функций в нужных местах - конечно, для этого надо понимать, что и где нужно.
 

ALEX_SHEPA

Guest
если у меня нет возможности сохранять картинки на сервере, а в бд просто прописывать их путь, то что я по вашему должен делать как не заносит их в базу!
 

ALEX_SHEPA

Guest
Автор оригинала: IntenT
ALEX_SHEPA

квота маленькая? или просто незнаешь как залить файл к себе в папку?
Вы что все сговорились, я прекрасно знаю как залить файл, начитан блин по этому поводу!
Просто файлы на сервере сказали не сохранять!
 

IntenT

SkyDiver
ALEX_SHEPA
странное замечание. наверное ты его неправильно понял.
может тебе сказали не занимать дисковое пространство?
Тогда огорчу тебя, картинку в БД занимает больше места, чем файл на диске
 
Сверху