图像仅在流式传输(?)到客户端

时间:2016-09-25 01:01:35

标签: php google-chrome spdy slim-3 psr-7

我已经写了一段时间的网络应用程序了,而且我一直在处理服务图片的一些问题。

我的代码使用file_get_contents从服务器提取文件数据,并使用Slim的Request对象的write方法输出文件内容,设置标题。对于大多数文件,这是有效的,但是较大的图像通常仅显示图像尺寸的灰色轮廓(在移动和桌面Chrome中测试)。请求ERR_SPDY_PROTOCOL_ERROR出错,这让我相信这是一个HTTP 2问题(我测试的服务器侦听HTTP 2连接,在其nginx配置中使用listen [port] http2指令设置),但是我尝试使用PSR-7的RequestInterface withProtocolVersion方法降级响应中使用的HTTP版本,但没有任何更改。

我知道使用file_get_contents然后输出所述内容是一种非常迂回的做事方式,但这是我知道允许此应用的用户任意设置上传文件位置的唯一方法。

这是我的代码中最相关的部分,其中$filepath是用户请求的文件的路径。除了大图像之外,此代码对所有文件都有预期效果。

return $response->withHeader('Content-Type', mime_content_type($filepath))->write(file_get_contents($filepath));

1 个答案:

答案 0 :(得分:0)

我使用Guzzle的LazyOpenStream课程解决了这个问题。现在似乎完美无缺!

修改:所以,虽然最初看起来没有效果,但事实证明,自从我改变以来nginx结束时,一些文件权限被搞砸了用户--- nginx不再拥有其FastCGI缓存目录。幸运的是,现在已经解决了,一切似乎都有效 如果您符合我的情况,请提供支持: R ead T F rackin'的 OGS!