ホームページ >バックエンド開発 >PHPチュートリアル >PHPのob_flushとflushの違いを深く理解する

PHPのob_flushとflushの違いを深く理解する

黄舟
黄舟オリジナル
2017-08-10 11:20:591525ブラウズ

マニュアルに記載されている


ob_flush/flush はどちらも出力バッファをフラッシュするものであり、一緒に使用する必要があるため、多くの人に混乱を引き起こす可能性があります...

実際には、これらは異なるオブジェクトに対して動作する場合があります。何も動作しません。

ob_*シリーズの関数はPHP自体の出力バッファを操作します。

そのため、ob_flushはPHP自身のバッファを更新します。

厳密に言えば、これはPHPでのみ使用されます。実際の効果は、Apache モジュール (ハンドラーまたはフィルター) がインストールされている場合にのみ発生します。マニュアルでは、Apache の他のモジュールがこのアクションの結果を変更する可能性があります。

有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,
这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。 

甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape
浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在
接受到 </table> 标记之前,不会显示出整个表格。 

一些版本的 Microsoft Internet Explorer 只有当接受到的256个
字节以后才开始显示该页面,所以必须发送一些额外的空格来让这
些浏览器显示页面内容。

したがって、この 2 つの使用の正しい順序は、最初に ob_flush、次にフラッシュですapache modulesapi下, flush会通过调用sapi_moduleflush成员函数指针, 间接的调用apacheapi: ap_rflush刷新apache

もちろん、他の SAPI では問題ありません。フラッシュを呼び出すのではなく、コードの移植性を確保するために、フラッシュを併用することをお勧めします。

以上がPHPのob_flushとflushの違いを深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。