ホームページ >バックエンド開発 >PHPチュートリアル >flash() 関数が動作しないように見える場合があります
インターネットで次のプログラムを見つけました。彼のコメントでは最初の文が非常に重要であると書かれていましたが、最初の文はまったく機能せず、300 個のスペースが出力されないことがわかりました。最初の文を削除しましたが、結果はまったく同じでした。なぜですか?
7e724e92f85581f335cec699f9115506
私は自分でプログラムを作成しましたが、ob_flush( )flush()に変更したら最初の項目が出力されなくなったように記憶していますが、flush()ではバッファの内容がすぐに出力されないのはなぜでしょうか?
ob_end_flush(); は、ASP の response.end とは異なるようです。 ob_end_flush(); の後でも、次の内容が出力されないようにする方法はありますか? ob_start( ; ";
ob_end_flush();
?>
ディスカッションへの返信(解決策)
バッファがいっぱいになったり、送信が完了したときに受信コンテンツを解釈する現象があるのはIEだけです
スペースはHTML要素ではなく、いくつあっても表示されるのは1つだけです
flash() の機能は、phpシステムバッファの内容をクライアントにプッシュすることです
ob_flush() の機能は、 php ユーザーバッファを php システムバッファに移す
ob_end_flush() ob_end_clean() の機能は、php ユーザーバッファの内容を php システムバッファにプッシュし、php ユーザーバッファを閉じることです。 ob_end_clean() の機能は、クリアすることです。
私はまだですシステムバッファとユーザーバッファについてはよく理解できず、オンラインで見つけることができません。情報には、PHP がマルチレベルバッファをサポートしているということだけが記載されています。 nレベルのバッファを作成できるようですが、バッファ内にバッファを構築できるのでしょうか。この点において、PHP は ASP よりも複雑です。
システムバッファは、php の出力バッファを指します。そのサイズを制御するには、output_buffering を使用します。
php プログラムが出力するとき、それがいっぱいになるか、プログラムが終了すると、そのバッファに保存されます。
flash() は必須です その中のコンテンツを出力します
ユーザーバッファは ob_start() で開かれたバッファを指します、各 ob_start() は 1 つであり、ネストが許可されます
このコードを試してみてください、 IE、Firefox、Chrome では問題なく動作しています。
<?phpecho str_pad('',4096);set_time_limit(50);for($i=0;$i<=5;$i++){ echo $i.'<br />';ob_flush();flush(); sleep(1);}?>
まずプロセス全体を理解する必要があります:
Web サーバーにもバッファーがあり、このバッファーのサイズは、サーバーがクライアントのブラウザーにプッシュされるまでに到達するバイト数に関係します。
次に、ブラウザにもバッファがあり、バイト数を受信した後に表示されます。
コードは、いくつかの空白を埋めるだけで、ブラウザーをだましてコンテンツをすぐに表示させます。問題はサーバー側にある可能性があり、サーバー側ではデータがクライアントにまったく送信されません。
サーバーの立て方ですが、デフォルトではApacheが設定されているようです。
さらに、ブラウザごとにバッファに関する異なる規定があります。複数のブラウザをサポートしたい場合は、バッファをできるだけ大きくする必要があります。
iis magager - system.webServer/handlers responseBufferLimit は 0 に設定され、
php.ini - Output_buffer =Off
for($i = 1; $i
Float モデレータの回答を読んでマークしてください
このコードを試してください、私はここにいますIE、Firefox、Chrome で問題が発生します。
ありがとうございます。