質問: $q - 5; } while(filesize($savefile) > 9000); ```
回答: 原因は2つ考えられて、1つはあなたのおっしゃるように *キャッシュ関係か何かわかりませんが、反映されていない* と言うことです。 *注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。* もうひとつは、コメントにもありますが、こちらです。 *quality はオプションであり、0(品質は最低 ですが、ファイルはより小さい)から100(品質は最高ですが、ファイルは 最大)の範囲で指定します。デフォルトは IJG 品質値(75)です。* ImageJpeg関数の3番目の引数qualityは0〜100と定義されており、負の数を指定した時の動作は未定義です。(失敗したり、値が0の時より大きなファイルができたりします。) filesize()を呼ぶ前にclearstatcache()を呼ぶようにした上で、quality(あなたのコードでは$q)の値が0でも所望のサイズに収まらなかったらあきらめる、と言った形に修正する必要があるでしょう。