Zend FW 响应对象和图像数据 - 添加换行?



我在Zend Framweork中使用php动态缩放图像以返回为mime类型的图像/jpeg时遇到了问题。

该问题表现为Firefox报告"无法显示图像,因为它包含错误"。这与中报告的问题相同:返回动态图像 zf2

为了重现该问题,我删除了所有文件 IO 并从类似的堆栈溢出示例中逐字复制了代码(在 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"。缓冲区中捕获的数据中没有这样的"0A",响应的内容成员中也没有这样的"0A"。尝试使用 GIMP 打开 wget 输出失败,除非我删除 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 00 10 4a 46 49 46 00 01 01 01 01 00 |.......JFIF..|

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

知道"0A"是从哪里来的吗? 我正在运行 zend 框架 2.5.1,PHP 7.2.2

谢谢蒂姆·喷泉。

终于找到了埋藏在我创建的一些教义实体中的冒犯性文件。果然,一个带有空行的杂散"?>"。

非常感谢

最新更新