1

CodeIgniter 2 のコントローラーを使用して URL に基づいてサイズ変更された画像を生成していますが、サーバーの 1 つで画像がランダムに切り取られています (上位 3 分の 2 のみが表示されます)。この問題は、画像の生成時に 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();

写真の URL はhttp://example.com/photo/100x100-abc.jpgのようになります。ご覧のように、圧縮が設定されないようにするには 4 つの異なる方法がありますが、設定されたままです。

上記のすべての方法を個別に試したり、組み合わせたりしましたが、役に立ちませんでした。私は頭が痛いです、誰か助けてくれますか?

更新: コンテンツの長さヘッダーを削除しましたが、apache は独自に設定していませんでしたが、興味深いことを発見しました。問題は Chrome と Safari でのみ発生し、Firefox では発生しないので、これも Webkit に関連しているのでしょうか?

4

0 に答える 0