先日、php 5 用に作成した新しいスクリプトが、php スクリプトが実際に終了する前に表示可能な html を出力し始めたことに気付きました。4でこうなった?
たとえば、各反復で何かをエコーする長いループがあります。kb単位で出力が小さかったので、ダウンロード速度による遅延ではなかったと思います。誰かが出力の違いを説明できますか?
おそらく、 output_bufferingディレクティブの設定に違いがあるのphp.ini
でしょうか?
が有効な場合output_buffering
、PHP は生成された出力をメモリに「保持」し(少なくとも、メモリ バッファのサイズよりも大きくならない場合)、ページの生成が終了したときにのみブラウザに送信します。
が無効になっている場合output_buffering
、スクリプトの実行がまだ終了していなくても、出力は生成されるとすぐに送信されます。
PHP 4 と 5 でこの点に違いがあるとは思えませんが、両方のバージョンでこの動作を得ることができますoutput_buffer
。PHP 5 のデフォルト値は、PHP 4 のデフォルト値とは異なるのでしょうか? (チェックしていません)
データが送信されるとき、PHP構成に依存し、それは出力バッファーであり、バッファーのように動作します。
そうは言っても、関数ob_start()
を使用しob_end_flush()
てバッファを制御することができます。Zend Frameworkは、たとえば出力バッファリングでいくつかの巧妙なことを行います...