1

我一直在编写一个网络应用程序一段时间,并且在提供图像方面遇到了一些问题。

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

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

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

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

1 回答 1

0

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

编辑:所以,虽然这最初似乎不起作用,但事实证明,nginx由于我更改了用户,一些文件权限被搞砸了——nginx不再拥有它的 FastCGI 缓存目录。幸运的是,现在已经解决了,一切似乎都正常了。
如果您处于我的情况,建议:阅读T he Frackin ' L ogs !

于 2016-09-30T23:08:20.607 回答