Я столкнулся с проблемой использования 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