[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод изображения из Oracle
s_salex
Здрасте, может кто знает...
В таблице Oracle есть поле img с типом BLOB где хранятся изображения, мне надо изображение оттуда взять и вывести в браузер, ну или в файл.
Вот скрипт который у меня:

$s1 = ociparse($c1, "select img from foto where nsyst = 10");
ociexecute($s1, OCI_DEFAULT);
$img = ociresult($s1, 1);

Вроде как в img чё-то записывается, но как её отобразить? какими командами?
echo $img; - не получается.

Есть варианты?



Спустя 36 минут, 4 секунды (1.06.2011 - 08:47) killer8080 написал(а):
нужно формировать заголовок соответствующий типу файла, например для jpeg:
header("Content-Type: image/jpeg");

Ещё чтобы снизить нагрузку, желательно формировать заголовок
header("Last-Modified: ".gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');

а в начале скрипта перед выводом контента проверять наличие этого заголовка и сверять дату, с датой модификации файла, если файл не обновлялся, останавливать скрипт и отдавать 304 статус код
$last_modified= gmdate('D, d M Y H:i:s', filemtime($file)).' GMT';
if(!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $last_modified){
header("HTTP/1.1 304 Not Modified");
exit();
}


PS разумеется в базе должна хранится информация о времени модификации файла, и вместо filemtime($file) подставить то что надо.

Спустя 11 минут, 28 секунд (1.06.2011 - 08:58) inpost написал(а):
echo $img - что выводит?

Спустя 26 минут, 6 секунд (1.06.2011 - 09:24) s_salex написал(а):
Спасибо за ответы.
Но, header("Content-Type: image/jpeg"); - на сколько я понял, относится к файлам с изображениями.
А моя переменная $img, я посмотрел, имеет тип object. Т.е. это не само изображение, а ссылка на него (это я вычитал из книги по PHP про переменную object).
Дак вот дальше то чё с этой ссылкой делать?

Спустя 2 минуты, 7 секунд (1.06.2011 - 09:26) s_salex написал(а):
echo $img; ничего не выводит, причем после этой команды скрипт php просто дальше не отрабатывается. Хотя у меня вывод ошибок отключен, щас включу посмотрю, может чего и напишет.

Спустя 5 минут, 35 секунд (1.06.2011 - 09:32) s_salex написал(а):
ага, вот что выводит

echo $img;

Catchable fatal error: Object of class OCI-Lob could not be converted to string in C:\WebServers\www\Poiskovik\sprav_lico_lev3_ibd.php on line 5769

Спустя 1 минута, 52 секунды (1.06.2011 - 09:34) killer8080 написал(а):
Content-Type указывает браузеру что контент является изображением, без этого он будет по умолчанию считать его text/html.

Спустя 2 минуты, 58 секунд (1.06.2011 - 09:37) inpost написал(а):
s_salex
Создай отдельный файл: img.php, в нём проделай всё, что сказал киллер.
Подгружай на страницу через <img src="img.php?nsyst=10" />.
Теперь в файле img.php принимай переменную $_GET['nsyst'] и подставь в условие запроса.

Спустя 9 минут, 48 секунд (1.06.2011 - 09:47) killer8080 написал(а):
С Oracle никогда не работал, но думаю проблема в этом
Цитата
oci_result() возвращает данные из поля field текущей строки результата (см. oci_fetch()). oci_result() возвращает данные в виде строк, кроме абстрактных типов (ROWID, LOB и FILE). В случае ошибки oci_result() возвращает FALSE.

наверно нужно выборку делать как то по другому

Спустя 1 час, 6 минут, 10 секунд (1.06.2011 - 10:53) s_salex написал(а):
Спасибо, буду пробовать

Спустя 1 час, 53 минуты, 56 секунд (1.06.2011 - 12:47) s_salex написал(а):
inpost, Ваше предложение с созданием img.php не имело успеха всё по той же причине - переменная $img это ссылка на объект.
Но, я частично решил проблему при помощи функции ociwritelobtofile:

<?
ociwritelobtofile($img, "foto".$i.".jpg");
$f_foto = "foto".$i.".jpg";
?>
<img src=<? echo $f_foto;?> />

Т.е. теперь у меня создаются файлы с фотографиями и при помощи img src выдаются на экран.
Теперь другая проблема, файлы с фотографиями будут копиться на диске. Я так понимаю, при помощи функции header("Content-Type: image/jpeg"); которую предложил killer можно изображение из файла загнать в переменную, а потом вывести на экран и файл благополучно удалить.

Друзья, подскажите, что надо написать после

header("Content-Type: image/jpeg");

и тогда, наверно, я достигну своей цели )

Спустя 11 минут, 4 секунды (1.06.2011 - 12:58) killer8080 написал(а):
s_salex
функция header() никакого отношения к файлам не имеет, она модифицирует HTTP заголовок, который вебсервер посылает браузеру, и всё!!!
А кидать данные в файл тоже не дело, ищи как вывести из базы.


может так?
...
$img = ociresult($s1, 1);
echo $img->load();


тут похоже на твою задачу

Спустя 29 минут, 22 секунды (1.06.2011 - 13:27) s_salex написал(а):
killer, спасибо за ссылку, в принципе то что надо.
$img = $img->load(); - именно здесь ссылка превращается в изображение.

Только вот после

header("Content-Type: image/jpeg");
echo $img;

выдается не изображение, а, как это назвать, ну типа текстовое содержимое... вот если файл с изображением через текстовый редактор открыть...
Ну т.е. вот так...
А изображения нет, я так понимаю header("Content-Type: image/jpeg"); не отрабатывается?

Спустя 4 минуты, 20 секунд (1.06.2011 - 13:31) killer8080 написал(а):
Странно blink.gif
а там нет ошибки типа headers cannot be send

Спустя 9 минут, 52 секунды (1.06.2011 - 13:41) s_salex написал(а):
как ни странно, есть, вот она
Warning: Cannot modify header information - headers already sent by

Я сразу то не посмотрел, там у чувака (по этой ссылке) такая же проблема )))

Спустя 3 минуты, 42 секунды (1.06.2011 - 13:45) s_salex написал(а):
Я вроде никакие заголовки не устанавливал. И чё делать?

Спустя 5 минут, 32 секунды (1.06.2011 - 13:51) killer8080 написал(а):
Значит до вызова header() уже что то выводилось. Возможно перед <?php были пробелы или ещё какие символы. Копай код. Может где то вываливалась ошибка.

Цитата (s_salex @ 1.06.2011 - 13:45)
Я вроде никакие заголовки не устанавливал.

да ну smile.gif а header() это что по твоему wink.gif

Спустя 12 минут, 4 секунды (1.06.2011 - 14:03) s_salex написал(а):
ну я имел ввиду до этой строки.
Ладно буду смотреть, спасибо.

Спустя 4 часа, 16 минут, 20 секунд (1.06.2011 - 18:19) inpost написал(а):
s_salex
Тебе удалось вывести фото, теперь сделай как я говорю, через отдельный файл.

Спустя 12 часов, 5 минут, 53 секунды (2.06.2011 - 06:25) Guest написал(а):
Блин, почему заголовок не меняется не знаю, где там в коде ковыряться - у меня 7 тыщ строк php вперемешку с HTML... хрен его знает. И с отдельным файлом такая же история.
Ладно, друзья спасибо за советы, пока сделаю как сделал - через файлы, а то время поджимает... Потом может разберусь, и если чё - напишу

Спустя 2 минуты, 3 секунды (2.06.2011 - 06:27) s_salex написал(а):
sorry, это был я, а то чё-то не зарегился

Спустя 5 часов, 8 минут, 35 секунд (2.06.2011 - 11:35) killer8080 написал(а):
s_salex
а какая разница, заголовки всё равно отправлять нужно, хоть с базой, хоть с файлами.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.