ホームページ >バックエンド開発 >PHPチュートリアル >PHP の ob_start() 関数に関する疑問を解決する_PHP チュートリアル
php ob_start と ob_end_flush() は、php のバッファされた出力関数です。
ob_start([string Output_callback]) - 出力バッファーを開きます。すべての出力情報はブラウザーに直接送信されなくなり、出力結果情報を処理するためにオプションのコールバック関数が使用されます。
ob_end_flush - 出力バッファーの内容を終了 (送信) し、出力バッファーを閉じます。
PHP の出力は PHP によって維持されるメモリに保存されます。これはすべて同じことを意味します。バッファーがいっぱいになると、php は自動的にデータを Web サーバーに送信します。
つまり、すべてのエコーは必ずしも何かを出力するわけではなく、バッファーに保存されます。
ob_start() の意味は次のように理解できます (ただし、実際には以下で説明する内容とは異なります)。つまり、このバッファーは ob_ 一連の関数によって制御されます。つまり、PHP は独自のバッファーを維持せず、自動的に保存しません。 ob_end() または同様の ob 操作を実行するまで、コンテンツは自動的に Web サーバーに送信されます。
ob_ 関数は通常、現在の出力をキャプチャするために使用され、効率とは何の関係もありません。出力がキャプチャされる理由については、さまざまな理由があります。たとえば、出力をキャプチャしてファイルにキャッシュすると、次のリクエストはこのキャッシュ ファイルの内容を出力として直接読み取ることができます。
リーリー上記のようなコードですが、はっきり言って意味がありません。
よく考えた後、インターネットで検索したところ、かなりの初心者(技術的な初心者、必ずしも PHP の 1 年生とは限らず、生涯初心者の人もいます)が、ob の役割を理解していないことがわかりました。しかし、インターネットでは、ob は出力バッファーや出力キャッシュと呼ばれることが多いため、ob シリーズの関数を PHP ページの表示を高速化するツールとして認識している人が多くいます。
実は、ob は出力キャッシュではなく出力バッファリングの略で、正しく使用すればある程度の速度向上にはつながりますが、やみくもに ob 関数を追加すると CPU への余分な負担が増えるだけです。次にobの基本的な機能について説明します。
先ほどの 3 番目の点で述べた GZIP 圧縮については、多くの人が使いたいと思っているかもしれませんが、実際には、私の友人のコードを少し変更することで、ページの gzip 圧縮を実現できます。
リーリーはい、コールバック関数 ob_gzhandler を追加するだけですが、これにはいくつかの小さな問題があります。第一に、これには zlib のサポートが必要であり、第二に、ブラウザが gzip をサポートしているかどうかが判断されません (現在はサポートされているようで、iPhone ブラウザもサポートしているようです)。それをサポートするため)。
以前のアプローチは、ブラウザーが gzip をサポートしているかどうかを判断し、サードパーティの gzip 関数を使用して ob_get_contents() のコンテンツを圧縮し、最後にエコーするというものでした。