Не удается получить изображение JPG с помощью PHP - PullRequest
1 голос
/ 02 июня 2011

Я извлекаю файл jpg из базы данных oracle и пытаюсь вывести его с помощью команды echo. Файл jpg хранится в виде большого двоичного объекта в базе данных и отображается правильно, когда я обращаюсь к нему из базы данных. Вот соответствующий код:

$query = 'select * from answer where answer_id = :answer_id';

$stmt = oci_parse($conn, $query);

oci_bind_by_name($stmt, ':answer_id', $answer_id);

oci_execute($stmt);


if ($row = oci_fetch_array($stmt, OCI_BOTH)){

    header('Content-type: image/jpeg');

    $mylob =  $row['ANS_PICTURE']->load();
    echo $mylob;

}

Это отправляет объем данных, который соответствует размеру файла, но браузер полностью не может интерпретировать его как изображение.

Странно, когда я использую

$fp = fopen('test.jpg', 'w');
fwrite($fp, $mylob);

Я могу сохранить файл, и у него нет проблем с отображением изображения, даже используя браузер, чтобы открыть изображение через сервер.

Если я добавлю заголовок расположения файла и предложу пользователю сохранить изображение, оно все равно не будет отображаться, когда я его открою.

Похоже, что существует проблема между печатью данных и браузером, получающим данные, хотя я понятия не имею, в чем может быть проблема.

У кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Попробуйте добавить заголовок Content-Length. Вы должны извлечь $ mylob_length из базы данных, потому что проверка каждый раз может быть замедлением:

header('Content-Length: ' . $mylob_length);
0 голосов
/ 02 июня 2011

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

В частности, проверьте

  • A Порядок следования байтов перед открытием <?php tag
  • Конечный пробел в вашем скрипте и любых других включенных скриптах.Самый простой способ победить это - опустить закрывающий тег ?> или, что еще лучше, выполнить exit; после отображения данных вашего изображения.

Наконец, это, вероятно, не имеет никакого эффекта, но я считаю,правильное имя заголовка - Content-Type (заглавная "C", заглавная "T").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...