Ответный объект Zend FW и данные изображения - добавление перевода строки? - PullRequest
0 голосов
/ 03 июня 2018

Я столкнулся с проблемой использования php в Zend Framweork для динамического масштабирования изображений для возврата в виде изображения mime-типа / jpeg.

Проблема проявляется в том, что отчеты Firefox «не могут отображать изображение, поскольку оно содержит ошибки»,Это та же проблема, о которой сообщалось в: возвращаемое динамическое изображение zf2

Чтобы воспроизвести проблему, я удалил любой файловый ввод-вывод и скопировал код из аналогичного примера переполнения стека (в действии zend FW)контроллер):

$resp = $this->getRespose();
$myImage = imagecreate(200,200);
$myGray = imagecolorallocate($myImage, 204, 204, 204);
$myBlack = imagecolorallocate($myImage, 0, 0, 0);
imageline($myImage, 15, 35, 120, 60, $myBlack);
ob_start();
imagejpeg($myImage);
$img_string = ob_get_contents();
$scaledSize = ob_get_length();
ob_end_clean();
imagedestroy($myImage);

$resp->setContent($img_string);
$resp->getHeaders()->addHeaders(array(
       'Content-Type' => $mediaObj->getMimeType(),
          'Content-Transfer-Encoding' => 'binary'));                
$resp->setStatusCode(Response::STATUS_CODE_200);
return $resp;

Когда я использую wget для захвата ответа jpeg, я замечаю «0A» в качестве первого байта вывода, а не разделитель полей «FF».Нет такого «0А» ни в данных, захваченных в буфере, ни в элементе содержимого ответа.Попытка открыть вывод wget с помощью GIMP не удалась, если я не удалю 0A.Я предполагаю, что Zend FW использует перевод строки в качестве разделителя полей для полей ответа и содержимого, но я не уверен, является ли это проблемой, или, если это так, как ее исправить.

Мои поля ответа выглядят хорошо:

HTTP request sent, awaiting response... 
HTTP/1.1 200 OK
Date: Sat, 02 Jun 2018 23:30:09 GMT
Server: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f
Set-Cookie: PHPSESSID=nsgk1o5au7ls4p5g6mr9kegoeg; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Transfer-Encoding: binary
Content-Length: 1887
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: image/jpeg

Вот дамп первых нескольких байтов wget с потоком jpeg, который завершается неудачно:

00000000 0a ff d8 ff e0 0010 4a 46 49 46 00 01 01 01 00 | ....... JFIF ..... |

00000010 60 00 60 00 00 ff fe 00 3e 43 52 45 41 54 4f 52 | . .....> CREATOR |

Есть идеи, откуда взялся 0A?Я использую Zend Framework 2.5.1, PHP 7.2.2

1 Ответ

0 голосов
/ 07 июня 2018

Спасибо, Тим Фонтан.

Я наконец-то нашел файл-нарушитель, похороненный в некоторых созданных мной доктринах.Конечно же, случайное "?>" С пустой строкой.

Очень ценится

...