В таблице 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:
Ещё чтобы снизить нагрузку, желательно формировать заголовок
а в начале скрипта перед выводом контента проверять наличие этого заголовка и сверять дату, с датой модификации файла, если файл не обновлялся, останавливать скрипт и отдавать 304 статус код
PS разумеется в базе должна хранится информация о времени модификации файла, и вместо filemtime($file) подставить то что надо.
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).
Дак вот дальше то чё с этой ссылкой делать?
Но, 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
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'] и подставь в условие запроса.
Создай отдельный файл: 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");
и тогда, наверно, я достигну своей цели )
Но, я частично решил проблему при помощи функции 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 заголовок, который вебсервер посылает браузеру, и всё!!!
А кидать данные в файл тоже не дело, ищи как вывести из базы.
может так?
тут похоже на твою задачу
функция 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"); не отрабатывается?
$img = $img->load(); - именно здесь ссылка превращается в изображение.
Только вот после
header("Content-Type: image/jpeg");
echo $img;
выдается не изображение, а, как это назвать, ну типа текстовое содержимое... вот если файл с изображением через текстовый редактор открыть...
Ну т.е. вот так...
А изображения нет, я так понимаю header("Content-Type: image/jpeg"); не отрабатывается?
Спустя 4 минуты, 20 секунд (1.06.2011 - 13:31) killer8080 написал(а):
Странно
а там нет ошибки типа headers cannot be send

а там нет ошибки типа headers cannot be send
Спустя 9 минут, 52 секунды (1.06.2011 - 13:41) s_salex написал(а):
как ни странно, есть, вот она
Warning: Cannot modify header information - headers already sent by
Я сразу то не посмотрел, там у чувака (по этой ссылке) такая же проблема )))
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) |
Я вроде никакие заголовки не устанавливал. |
да ну


Спустя 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
а какая разница, заголовки всё равно отправлять нужно, хоть с базой, хоть с файлами.
а какая разница, заголовки всё равно отправлять нужно, хоть с базой, хоть с файлами.