[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поток в файл картинку
Gram01
Добрый день.
Есть следующая проблема в БД в бинарном формате хранится изображение и его необходимо сохранить на диск сервера в том виде в котором он был записан.
при попытке сделать это вот так
$fi = fopen($dirscrenshots.'/'.$id_str.'.jpg', 'w+b');
stream_copy_to_stream($value->screen0->image, $fi);
fclose($fi);

в файл записываются данные как строка и соответственно картинка корректно не открывается
пытался обернуть в
pack('c*',$value->screen0->image)

, но файл получается по 16 кб, а они больше, не подскажите куда копнуть, а лучше пример кода ибо в PHP не силен я больше с Java дружу.


AllesKlar
База какая?
Какое расширение php для работы с базой?

_____________
[продано копирайтерам]
Gram01
база данных postgresql
расширение я использую Yii 1.1.16 стандартный класс CActiveRecord для извлечения данных, данные извлекаются как ресурс типа stream
AllesKlar
по postgresq не скажу, но для начала можно проверить вывод в браузер, на предмет правильности чтения данных из базы.

header("Content-Type: image/jpg");
fpassthru($value->screen0->image);
exit;


Еще зависит от ОС, на которой веб-сервер крутится.
Linux и Windows (вернее их драйвера работы с базой) по разному читают BLOB из базы.

_____________
[продано копирайтерам]
Gram01
при выполнении
header("Content-Type: image/jpg");
fpassthru($value->screen0->image);
exit;

картинка не отображается.
видимо и из бд читается как строка.
на сервере БД стоит ОС Windows
AllesKlar
ОСь сервера базы не важна, важна ОСь веб-сервера.

Раз картинки в браузере нет, то да, проблема еще на стадии чтения из базы.
Ну, для 100% уверености сделай еще так
error_reporting(-1);
ini_set('display_errors', 1);
header("Content-Type: image/jpg");
fpassthru($value->screen0->image);
exit;


Это чтобы убедиться, что в браузер никакие заголовки не идут до отправки картики

Если с заголовками всё чисто, то... копай как постгре читает BLOB из базы.
Геморойная тема, эти BLOB

И да.. терпения тебе, сейчас придут жутко умные люди, которые не подозревают, что с базой может работать более одного приложения одновременно, помимо интернет-сайта, и начнут кричать, что только лохи хранят в базе картинки :)

_____________
[продано копирайтерам]
Invis1ble
Цитата
ресурс типа stream

??
file_put_contents($dirscrenshots.'/'.$id_str.'.jpg', $value->screen0->image);


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Gram01
Цитата (Invis1ble @ 2.06.2015 - 14:40)
Цитата
ресурс типа stream

??
file_put_contents($dirscrenshots.'/'.$id_str.'.jpg', $value->screen0->image);



Тот же результат что и при
$fi = fopen($dirscrenshots.'/'.$id_str.'.jpg', 'w+b');
stream_copy_to_stream($value->screen0->image, $fi);

файл создается но в нем по сути текст а не картинка.
Invis1ble
ну попробуй imagecreatefromstring() + imagejpeg()

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Gram01
Цитата (Invis1ble @ 2.06.2015 - 15:05)
ну попробуй imagecreatefromstring() + imagejpeg()

не проходит
выдает
imagecreatefromstring(): Data is not in a recognized format

Invis1ble
значит жди sergeiss, это наш местный посгрейщик, может он в курсе

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Gram01
решил проблему
http://www.programering.com/a/MjMwADMwATE.html
суть ее в том что нужно в конфиге БД раз комментировать строчку
bytea_output = 'hex' # hex, escape

и вписать в параметр escape вместо hex

тогда
file_put_contents($dirscrenshots.'/'.$id_str.'.jpg',$value->screen0->image );

отрабатывает правильно
Быстрый ответ:

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