PHP出力キャッシュobシリーズの機能を詳しく解説_PHPチュートリアル
ob の基本原理: ob キャッシュがオンになっている場合、エコー データは最初に ob キャッシュに配置されます。ヘッダー情報の場合は、プログラム キャッシュに直接配置されます。ページが最後まで実行されると、ob キャッシュされたデータがプログラム キャッシュに配置され、順番にブラウザに返されます。
ob の基本的な機能についてお話しましょう:
1) setcookie()、header()、または session_start() などの関数を使用して、ブラウザーが出力した後にヘッダー ファイルを送信することによって引き起こされるエラーを防ぎます。実際、この種の使用頻度を減らし、適切なコーディング習慣を身に付ける方が良いでしょう。
2) 取得できない関数の出力をキャプチャします。たとえば、phpinfo() は大量の HTML を出力しますが、この時点では、ob は $info=phpinfo(); のような変数を使用できません。役に立つ。
3) gzip 圧縮、簡体字中国語から繁体字中国語への変換、文字列の置換など、出力コンテンツを処理します。
4) 静的ファイルの生成では、実際にはページ全体の出力をキャプチャし、それをファイルとして保存します。 HTML 生成またはページ全体のキャッシュでよく使用されます。
3 番目の GZIP 圧縮については、使いたいと思っていても実際には使ったことがない人も多いかもしれませんが、コードを少し変更するだけで、ページの gzip 圧縮を実現できます。
キャッシュされるコンテンツ
はい、コールバック関数 ob_gzhandler を追加するだけですが、これにはいくつかの小さな問題があります。 zlib のサポートが必要です。第二に、ブラウザが gzip をサポートしているかどうかは判断されません (現在はサポートされているようで、すべての iPhone ブラウザが gzip をサポートしているようです)。
以前のアプローチは、ブラウザーが gzip をサポートしているかどうかを判断し、サードパーティの gzip 関数を使用して ob_get_contents() のコンテンツを圧縮し、最後にエコーするというものでした。
1. obシリーズの関数でよく使われる関数のコレクション
ob_start(); //出力バッファを開きます。すべての出力情報はブラウザに直接送信されなくなり、出力バッファに保存されます。
ob_clean(); //バッファを閉じずに内部バッファの内容を削除します(出力なし)。
ob_end_clean(); //内部バッファの内容を削除し、バッファを閉じます(出力なし)。
ob_get_clean(); //内部バッファの内容を返し、バッファを閉じます。 ob_get_contents() および ob_end_clean() の実行と同等
ob_flush(); // 内部バッファの内容をブラウザに送信し、バッファの内容を削除し、バッファを閉じません。
ob_end_flush(); //内部バッファの内容をブラウザに送信し、バッファの内容を削除して、バッファを閉じます。
ob_get_flush(); //内部バッファの内容を返し、バッファを閉じてから、バッファの内容を解放します。 ob_end_flush() と同等で、バッファの内容を返します。
flush(); //ob_flush で解放した内容と PHP バッファにない内容をブラウザに出力し、内部バッファの内容を更新して出力します。
ob_get_contents(); // 出力せずにバッファーの内容を返します。
ob_get_length(); // 内部バッファーがアクティブ化されていない場合、この関数は FALSE を返します。
ob_get_level(); //出力バッファリングメカニズムのネストレベルを返します。
ob_get_status(); //出力バッファのステータスを取得します。
ob_gzhandler //ob_start コールバック関数は、gzip を使用してバッファーの内容を圧縮します。
ob_list_handlers //使用中のすべての出力ハンドラーをリストします
output_add_rewrite_var //URL リライター値を追加します
output_reset_rewrite_vars //URL リライター値をリセットします
output_buffering //この値が ON の場合、出力制御がすべてのスクリプトで使用されます。値が数値の場合、バッファーの最大バイト制限を表します。コンテンツのキャッシュ 上限に達すると、現在のバッファの内容がブラウザに自動的に出力されます。
output_handler //このオプションは、スクリプトのすべての出力を関数にリダイレクトできます。たとえば、output_handler が mb_output_handler() に設定されている場合、文字のエンコーディングは指定されたエンコーディングに変更されます。設定された処理関数は出力バッファリングを自動的に処理します。
implicit_flush //ob_implicit_flush と同じ機能、デフォルトはオフです。
2. 例の説明
1. header()関数の前にechoコードが存在する可能性があります
出力制御関数を使用すると、スクリプト内のデータの出力を自由に制御できます。特にデータ出力後にファイルヘッダーを出力したい場合に非常に便利です。 出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響しませんが、echo() や PHP コードと同様のデータ ブロックにのみ影響します。
;header() 関数を知っている人なら誰でも、この関数がブラウザにファイル ヘッダーを送信することを知っていますが、この関数を使用する前に出力がある場合 (スペース、キャリッジ リターン、ライン フィードなどの空の出力を含む)、エラーが発生します。プロンプトが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。
2. phpinfo() 関数の出力を保存します
$file = fopen('info.txt', 'w') //ファイル info.txt を開きます
fwrite($file, $info); info.txt
fclose($file); PHP によって生成された HTML ページ。この HTML ページが更新されなくなると、別のユーザーがこのページを再度参照したときに、プログラムは、sina、163、sohu などの大量の情報を含む一部の Web サイトの PHP および関連データベースを呼び出すことはなくなります。このようなテクノロジーの恩恵は非常に大きいです。
コードをコピーします
コードは次のとおりです:
ob_start();
PHP4.0.4 には新しい出力キャッシュ ハンドル ob_gzhandler があり、前のクラスに似ていますが、その使用法は異なります。 ob_gzhandler を使用する場合、以下が php.ini に追加されます:
コードをコピーします
コードは次のとおりです: output_handler = ob_gzhandler;
このコード行により、PHP は出力キャッシュをアクティブにし、送信するすべてのものを圧縮します。外 。
php_value Output_handler ob_gzhandler
または、次のように PHP コードから呼び出します:
ob_start("ob_gzhandler");
キャッシュ ハンドルを出力する方法は確かに非常に効果的であり、サーバーに特別な負荷をかけません。ただし、Netscape Communicator では圧縮グラフィックのサポートが不十分であるため、すべてのユーザーが IE ブラウザを使用していることを保証できない限り、圧縮 JPEG および GIF グラフィックを無効にする必要があることに注意してください。一般に、この圧縮は他のすべてのファイルに対して機能しますが、特に特別なプラグインやデータ ビューアを使用する場合は、ブラウザごとに個別にテストすることをお勧めします。
注:
1. 一部の Web サーバーのデフォルトの出力バッファリングは 4069 文字以上です。つまり、フラッシュが確実に効果的であるようにするには、出力コンテンツが 4069 文字に達する必要があります。 ob_flush() 関数の前に置くのが最適です。次のステートメントがあります:
2. ob_* 系の関数は PHP 自体の出力バッファを操作するため、ob_flush は PHP 自体のバッファを更新するだけですが、flush は Apache のバッファを更新します。したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。 ob_flush は PHP のバッファからデータを解放し、flush はバッファに出入りするすべてのデータをブラウザに送信します。
3. ob_start() を使用した後は、スクリプトの echo/print やその他の出力がブラウザーに表示されないと誤解しないでください。 PHP スクリプトが終了すると、バッファが自動的に更新され、内容が出力されるためです。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
