我已经写了一段时间的网络应用程序了,而且我一直在处理服务图片的一些问题。
我的代码使用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));
答案 0 :(得分:0)
我使用Guzzle的LazyOpenStream
课程解决了这个问题。现在似乎完美无缺!
修改:所以,虽然最初看起来没有效果,但事实证明,自从我改变以来nginx
结束时,一些文件权限被搞砸了用户--- nginx
不再拥有其FastCGI缓存目录。幸运的是,现在已经解决了,一切似乎都有效
如果您符合我的情况,请提供支持: R ead T 他 F rackin'的→强> OGS!