長時間実行されるため、実行中に進行状況をエコーするスクリプトがいくつかあります。基本的に、処理されたデータのループされた各行の最後で、それぞれが次のことを行います。
echo '.';
@ob_flush();
flush();
これは何年もうまく機能していましたが、その後、いくつかのサーバーで PHP 5.3.x と Apache 2.2.x にアップグレードしました。ここで、バッファーに空白を埋め込んだり、「ob_implicit_flush(1)」を設定したりしても、コマンドで出力を表示できません。
1 つのサーバーで引き続き出力が表示されますが、チャンクになっています。5 分近くかかる場合があり、その後突然、一連のドットが画面に表示されます。他のサーバーでは、スクリプトの実行が完全に終了するまで何も得られません。
php.ini ファイルと httpd.conf ファイルを調べて、異なるサーバー間で何が変更されたのかを調べてみましたが、明らかに何かが欠けています。
また、影響を受けるスクリプトの .htaccess で mod_deflate を無効にしようとしましたが、それも役に立ちません (mod_gzip を無効にすると、問題はすぐに修正されます)。
誰かがこれで正しい方向に私を向けることができますか? スクリプトの実行をリアルタイムで監視できないことは、あらゆる種類の問題を引き起こしていますが、これらの古い PHP バージョンにこれ以上とどまることはできません。
さらに奇妙なことに、サーバーを PHP 5.2.17 にダウングレードしようとしましたが、ダウングレード後も出力バッファーの問題が残りました。これは、Apache 2 がそのまま残されているため、Apache が PHP 出力を処理する方法に関連していると思われます。