我在CodeIgniter 2中使用控制器根据其URL生成调整大小的图像,但是我们的一台服务器上的图片被随机切断(只显示前三分之二左右)。我相信这个问题与生成图片时使用的GZIP有关,但是当我关闭压缩时很难一致地重现并完全消失。
有趣的是,GZIP压缩仅在压缩text / html时添加到输出的JPEG中。
这是我的apache配置:
<IfModule mod_deflate.c>
<FilesMatch "(?<!\.jpg)$">
AddOutputFilterByType DEFLATE text/html
</FilesMatch>
</IfModule>
<FilesMatch "\.jpg$" >
SetEnv no-gzip dont-vary
RemoveOutputFilter php
</FilesMatch>
我的htaccess文件包含此
SetEnvIfNoCase Request_URI ".jpg$" no-gzip dont-vary
<FilesMatch "\.(gif|jpe?g|png)$">
SetEnv no-gzip dont-vary
</FilesMatch>
PHP代码看起来像这样
//code to generate the image and save it to the hard drive goes here
//output the file
$binarydata = file_get_contents($directory.$file);
$offset = 5184000;
header("Cache-Control: must-revalidate");
header('Content-Type: image/jpeg');
header('Expires: '. gmdate('D, d M Y H:i:s', $dbrecord->updated_at->format("U") + $offset) .' GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $dbrecord->updated_at->format("U")) .' GMT');
header('Accept-Ranges: bytes');
header("Content-Disposition: inline; filename=".$file);
header('Content-Length: '.strlen($binarydata));
print($binarydata);
die();
照片的网址类似于http://example.com/photo/100x100-abc.jpg,正如您所看到的,有四种不同的方法可以避免设置压缩,但仍会设置。
我已经分别尝试了上面所有的方法并且结合起来但无济于事。我在我的智慧结束,有人可以帮忙吗?
更新: 我删除了内容长度标题,apache没有单独设置它,但我们刚刚发现了一些有趣的东西,问题只出现在Chrome和Safari而不是Firefox中,所以我想知道这是否也与webkit有关?