русский
Germany.ruForen → Архив Досок→ Webdesign und Hosting

Проблема с выводом изображения из MySQL

479  
R1111 постоялец16.02.10 15:22
NEW 16.02.10 15:22 
Скрипт вот такой
// Обработчик HTML-формы
if(!empty($_FILES))
{
// Проверяем является ли переданный файл картинкой
if(substr($_FILES['image']['type'],0,5) == 'image')
{
// Читаем содержимое файла
$content = file_get_contents($_FILES['image']['tmp_name']);
// Уничтожаем файл во временной директории
unlink($_FILES['image']['tmp_name']);
// Экранируем спец-символы в бинарном содержимом файла
$content = mysql_escape_string($content);
// Формируем запрос на добавление файла в таблицу
$query = "INSERT INTO image VALUES(NULL, '".$_FILES['image']['name']."', '$content')";
if(mysql_query($query))
{
Поле в таблице куда записывается картинка BLOB
Вывожу вот так
// Извлекаем файл из базы данных
$query = "SELECT * FROM image
WHERE id_image = $_GET[id_image]";
$img = mysql_query($query);
if(!$img) exit(mysql_error());
$image = mysql_fetch_array($img);
// Отсылаем заголовки на загрузку файла
header("Content-type: image/*");
// Отправляем файл пользователю
echo $image['content'];
Но вместо картинки выводится вот это
#2aqBЃ‘$3RЎ±Б %Ср4CSbrб&‚’ў¤ІВс5DEcѓ•ґ')6Tdst„“іДТФVeu…‡ЈҐµХяЪ?ыщЈFґpчЖ›;Ќ~@Ыk"Ґ}ХйхIq)1Х%ШФXП–вSкЋР.8Їъ©к›ЗяHGГRЈёu¦§ЯwФ‹љ€Ґ …>ЯХЭ—§еWњКY+@I  HъкpбЯ€ч 9Ы¦®.пќ2ж•DXjҐH-»ЈY)Л±^J@%$g§Рђu:2лѓЈІG§ѕІЬ„#ж#Ч'[®Sc«їРќkЦ”§©C#?]cвЩQ@іYуPћ”фзї¦°lцJR{ыj™m­9i9N{Њлnґ¤ЏЧXT¤6’p:}Й=±Ў3ЪQифП¦u”KI8чЗmrПыЏЧйых•Hи%їAЯи5џ€ ЂPrЇA­LЖ”ЂµcР“Ќ[hЂnюъВет§G˜лd-—О|ДдЊъъЌ.А@"уЯУJhСЈFЌ4hСЈFЌ4hСЈFЌ4hСЈXWб:з/) HИ>ъИtџЖЖ•l{юьk}4hСЈFЌ4hСЈFЌ4hСЈZ8=я~ё¦0ўЏ»YЏt’нЇЊюUHT?ф¦9џ]U %ъЦ”yѕXtщфµ}A$dъ~zbV‰zҐХ@«p‚Є$·њКw"U ґ*ћћ˜Ћ¦j
Как ещё можно вывести картинку?
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#1 
GANDJUBAS Ганджубас16.02.10 16:06
GANDJUBAS
NEW 16.02.10 16:06 
in Antwort R1111 16.02.10 15:22
Ты всегда так кодишь с прямым вписыванием $_GET переменных в SQL?
Хранить файлы в базе данных - не самое хорошее решение.
По сабжу. Перед header(...); точно нету никакого вывода? К примеру перед "<?" пробел или еще что-то; скрипт в UTF-8 сохранен и пишет BOM на выводе.
#2 
GANDJUBAS Ганджубас16.02.10 16:13
GANDJUBAS
NEW 16.02.10 16:13 
in Antwort R1111 16.02.10 15:22
попробовал у себя простенький скрипт.
Firefox, к примеру, такую ерунду не хавает:
header("Content-type: image/*");
ему надо конкретное указание типа картинки, аля:
header("Content-type: image/png");
#3 
R1111 постоялец16.02.10 16:47
NEW 16.02.10 16:47 
in Antwort GANDJUBAS 16.02.10 16:13
Пробовал и image/jpg всё то же. А ещё пишет Warning: Cannot modify header information - headers already sent by
Использую IE7
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#4 
GANDJUBAS Ганджубас16.02.10 17:08
GANDJUBAS
NEW 16.02.10 17:08 
in Antwort R1111 16.02.10 16:47
В ответ на:
Warning: Cannot modify header information - headers already sent by

Ну это и есть причина. Уже что-то было послано до того, как был прописан хидер.
#5 
R1111 постоялец16.02.10 17:28
NEW 16.02.10 17:28 
in Antwort GANDJUBAS 16.02.10 17:08
Нет ничего, всё убрал, теперь так не пишет но при открытии файла выходит запрос, открыть или сохранить. Выбираешь открыть , открывает блокнотом.
Файл php. Странно, картинка из базы видимо никак не выводится как файл, только как набор символов
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#6 
Валидол знакомое лицо16.02.10 18:30
NEW 16.02.10 18:30 
in Antwort R1111 16.02.10 15:22
Твое дело конечно, но нафига картинки в дб хранить?
Xрани пути к картинкам.
#7 
R1111 постоялец16.02.10 18:50
NEW 16.02.10 18:50 
in Antwort Валидол 16.02.10 18:30
Экперемент. Было бы удонее прямо из базы показывать. Меня тоже учили что в бд только пути а файлы в каталогах. Есть ряд причин и преимуществ но иногода быват жаль что нельзя сразу а базу и оттуда. Поэтому хочу попробовать как будет выглядеть,при работе с MS SQL получается, и с ORACLE
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#8 
R1111 постоялец16.02.10 19:02
NEW 16.02.10 19:02 
in Antwort R1111 16.02.10 18:50
Интересно, картинка записывается как двоичный формат, это не файл картинки , а то из чего она состоит . Следовательно как бы тогда всё это обратно в файл превратить? Почему то в например
MS SQL серваке , записывается так же, но когда выводишь видно картинку, правда это не в php а ASP.
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#9 
GANDJUBAS Ганджубас16.02.10 23:25
GANDJUBAS
NEW 16.02.10 23:25 
in Antwort R1111 16.02.10 17:28
Ну раз пишет, что уже что-то послало, значит что-то послало. Чудес не бывает.
#10 
voxel3d коренной житель17.02.10 09:04
voxel3d
NEW 17.02.10 09:04 
in Antwort R1111 16.02.10 19:02
В ответ на:
картинка записывается как двоичный формат, это не файл картинки , а то из чего она состоит

Долго пытался понять смысл написанного. Так и не понял.
Dropbox - средство синхронизации и бэкапа файлов.
#11 
Oleg.de старожил17.02.10 12:35
Oleg.de
17.02.10 12:35 
in Antwort R1111 16.02.10 17:28
делайте правильно хеадер :http://http%3A//php.net/manual/de/function.header.php и будет вам счастье!
header("Content-type: ****
header("Content-Transfer-Encoding: ****
header("Content-Disposition: attachment; filename=****
О Германии на русском: Законы, карьера, общество ...
#12 
R1111 постоялец17.02.10 13:13
NEW 17.02.10 13:13 
in Antwort Oleg.de 17.02.10 12:35, Zuletzt geändert 17.02.10 13:16 (R1111)
Никто не угодал Всем спасибо, уважаемые коллеги. Ларчик просто открывался. Поразмыслил тыковкой и вывел вот такую вещь, всё работает.
файл image.php
include("connect.php");
$query = "SELECT * FROM image WHERE id_image=2";
$img = mysql_query($query);
if(!$img) exit(mysql_error());
$image = mysql_fetch_array($img);
header("Content-type: image/*");
echo $image['content'];
Файл вывода rezult.php
echo"<img src='image.php'>";
Вот и всё, как видно из первой теории что данные о картинке хранятся в базе как набор двоичного кода, следовательно и выводится он как код,
тогда логичнее было бы принять его как за файл изображения и показать тегом img src=
Студентам на земетку, а мне помогло справится с очередной задачей
Web Site maker, Erstellen von Internetseiten und SEO Optimierung
#13 
voxel3d коренной житель17.02.10 14:14
voxel3d
NEW 17.02.10 14:14 
in Antwort R1111 17.02.10 13:13, Zuletzt geändert 17.02.10 14:15 (voxel3d)
В ответ на:
Вот и всё, как видно из первой теории что данные о картинке хранятся в базе как набор двоичного кода, следовательно и выводится он как код,
тогда логичнее было бы принять его как за файл изображения и показать тегом img src=

Логичнее посмотреть справку по imagepng / imagejpeg / ... где показано, как делают показ сгенерированных картинок. (именно так как ты и нашёл, используя два скрипта) Из твоих вопросов перемешанных бессмыслицей про "файл не как файл а то из чего он состоит" я так и не понял, что тебе нужно было после того, как избавился от вывода мусора до посылки хидера. -)
Dropbox - средство синхронизации и бэкапа файлов.
#14 
katran76 коренной житель17.02.10 18:07
NEW 17.02.10 18:07 
in Antwort voxel3d 17.02.10 14:14
В ответ на:
"файл не как файл а то из чего он состоит"

Ватсон, это же как два пальца об асфальт
файл - это байты на диске
а состоят они из намагниченных молекул оксида железа
#15 
Murr_0005 прохожий17.02.10 18:59
NEW 17.02.10 18:59 
in Antwort R1111 17.02.10 13:13
мне помогло
-----
Тебе бы больше помогло, если бы ты глянул... RFC 2557.
<IMG SRC="data:image/gif;base64,R..."
Тем более, что ссылки находятся за пару минут.
#16