PHPで画像ファイルサイズ圧縮


無限ループしてしまいます。  
ImageJpegで保存した際、キャッシュ関係か何かわかりませんが、反映されていないということでしょうか？

[code]

     $q = 75;
     do {
         ImageJpeg($out, $savefile, $q);
         $q = $q - 5;
     } while(filesize($savefile) > 9000);
    
[/code]




原因は2つ考えられて、1つはあなたのおっしゃるように  
_キャッシュ関係か何かわかりませんが、反映されていない_  
と言うことです。  
<http://php.net/manual/ja/function.filesize.php>  
_注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。_

もうひとつは、コメントにもありますが、こちらです。  
<http://php.net/manual/ja/function.imagejpeg.php>  
_quality はオプションであり、0(品質は最低 ですが、ファイルはより小さい)から100(品質は最高ですが、ファイルは
最大)の範囲で指定します。デフォルトは IJG 品質値(75)です。_  
ImageJpeg関数の3番目の引数qualityは0〜100と定義されており、負の数を指定した時の動作は未定義です。(失敗したり、値が0の時より大きなファイルができたりします。)

filesize()を呼ぶ前にclearstatcache()を呼ぶようにした上で、quality(あなたのコードでは$q)の値が0でも所望のサイズに収まらなかったらあきらめる、と言った形に修正する必要があるでしょう。

