ホームページ >バックエンド開発 >PHPチュートリアル >PHP の ob_start() 関数に関する疑問を解決する_PHP チュートリアル

PHP の ob_start() 関数に関する疑問を解決する_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-13 10:33:18933ブラウズ

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の基本的な機能について説明します。

  1. ブラウザが出力した後に setcookie、header、または session_start 関数を使用することによって引き起こされるエラーを防止します。 (私は当初、冒頭で述べたコードにそのような機能があると思っていましたが、後で友人がそうではないと言いました) 実際、この種の使用法は減らして、良いコーディング習慣を身に付けたほうが良いでしょう。
  2. 取得できない関数の出力をキャプチャします。たとえば、phpinfo は大量の HTML を出力しますが、現時点では、それをキャプチャするために $info=phpinfo(); などの変数を使用することはできません。
  3. gzip 圧縮、簡体字中国語と繁体字中国語間の変換、一部の文字列の置換などの出力コンテンツを処理します。
  4. 静的ファイルの生成では、実際にページ全体の出力をキャプチャし、それをファイルとして保存します。これは、HTML 生成またはページ全体のキャッシュでよく使用されます。

先ほどの 3 番目の点で述べた GZIP 圧縮については、多くの人が使いたいと思っているかもしれませんが、実際には、私の友人のコードを少し変更することで、ページの gzip 圧縮を実現できます。

リーリー

はい、コールバック関数 ob_gzhandler を追加するだけですが、これにはいくつかの小さな問題があります。第一に、これには zlib のサポートが必要であり、第二に、ブラウザが gzip をサポートしているかどうかが判断されません (現在はサポートされているようで、iPhone ブラウザもサポートしているようです)。それをサポートするため)。

以前のアプローチは、ブラウザーが gzip をサポートしているかどうかを判断し、サードパーティの gzip 関数を使用して ob_get_contents() のコンテンツを圧縮し、最後にエコーするというものでした。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752507.html技術記事 php ob_start と ob_end_flush() は、php のバッファされた出力関数です。 ob_start([string Output_callback]) - 出力バッファを開きます。すべての出力情報はブラウザに直接送信されなくなりますが...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。