検索
ホームページバックエンド開発PHPチュートリアル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_start(ob_gzhandler);
キャッシュされるコンテンツ

はい、コールバック関数 ob_gzhandler を追加するだけですが、これにはいくつかの小さな問題があります。 zlib のサポートが必要です。第二に、ブラウザが gzip をサポートしているかどうかは判断されません (現在はサポートされているようで、すべての iPhone ブラウザが gzip をサポートしているようです)。
以前のアプローチは、ブラウザーが gzip をサポートしているかどうかを判断し、サードパーティの gzip 関数を使用して ob_get_contents() のコンテンツを圧縮し、最後にエコーするというものでした。

1. obシリーズの関数でよく使われる関数のコレクション

コードをコピーします コードは次のとおりです:

ob_start(); //出力バッファを開きます。すべての出力情報はブラウザに直接送信されなくなり、出力バッファに保存されます。

ob_clean(); //バッファを閉じずに内部バッファの内容を削除します(出力なし)。
ob_end_clean(); //内部バッファの内容を削除し、バッファを閉じます(出力なし)。
ob_g​​et_clean(); //内部バッファの内容を返し、バッファを閉じます。 ob_get_contents() および ob_end_clean() の実行と同等
ob_flush(); // 内部バッファの内容をブラウザに送信し、バッファの内容を削除し、バッファを閉じません。
ob_end_flush(); //内部バッファの内容をブラウザに送信し、バッファの内容を削除して、バッファを閉じます。
ob_g​​et_flush(); //内部バッファの内容を返し、バッファを閉じてから、バッファの内容を解放します。 ob_end_flush() と同等で、バッファの内容を返します。
flush(); //ob_flush で解放した内容と PHP バッファにない内容をブラウザに出力し、内部バッファの内容を更新して出力します。

ob_g​​et_contents(); // 出力せずにバッファーの内容を返します。
ob_g​​et_length(); // 内部バッファーがアクティブ化されていない場合、この関数は FALSE を返します。
ob_g​​et_level(); //出力バッファリングメカニズムのネストレベルを返します。
ob_g​​et_status(); //出力バッファのステータスを取得します。

ob_implicit_flush(); //絶対リフレッシュをオンまたはオフにします。デフォルトは、ob_implicit_flush(true) をオンにした後、出力ステートメント (例: echo) が実行されることを意味します。これは、flush() を呼び出したり、スクリプトの出力が終了するまで待機したりする代わりに、ブラウザに直接送信されます。

ob_g​​zhandler //ob_start コールバック関数は、gzip を使用してバッファーの内容を圧縮します。

ob_list_handlers //使用中のすべての出力ハンドラーをリストします
output_add_rewrite_var //URL リライター値を追加します
output_reset_rewrite_vars //URL リライター値をリセットします

これらの関数の動作は php_ini 設定の影響を受けます:

output_buffering //この値が ON の場合、出力制御がすべてのスクリプトで使用されます。値が数値の場合、バッファーの最大バイト制限を表します。コンテンツのキャッシュ 上限に達すると、現在のバッファの内容がブラウザに自動的に出力されます。
output_handler //このオプションは、スクリプトのすべての出力を関数にリダイレクトできます。たとえば、output_handler が mb_output_handler() に設定されている場合、文字のエンコーディングは指定されたエンコーディングに変更されます。設定された処理関数は出力バッファリングを自動的に処理します。
implicit_flush //ob_implicit_flush と同じ機能、デフォルトはオフです。

2. 例の説明

1. header()関数の前にechoコードが存在する可能性があります
出力制御関数を使用すると、スクリプト内のデータの出力を自由に制御できます。特にデータ出力後にファイルヘッダーを出力したい場合に非常に便利です。
出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響しませんが、echo() や PHP コードと同様のデータ ブロックにのみ影響します。

コードをコピーします コードは次のとおりです:
ob_start(); // バッファを開き、index.php へ
ob_end_flush() // すべてのコンテンツをブラウザに出力します
;header() 関数を知っている人なら誰でも、この関数がブラウザにファイル ヘッダーを送信することを知っていますが、この関数を使用する前に出力がある場合 (スペース、キャリッジ リターン、ライン フィードなどの空の出力を含む)、エラーが発生します。プロンプトが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。

2. phpinfo() 関数の出力を保存します
コードをコピーします コードは次のとおりです:
ob_start() //phpinfo 関数を使用します
$info = ob_get_contents( );バッファの内容を取得して $info に代入します
$file = fopen('info.txt', 'w') //ファイル info.txt を開きます
fwrite($file, $info); info.txt
fclose($file); PHP によって生成された HTML ページ。この HTML ページが更新されなくなると、別のユーザーがこのページを再度参照したときに、プログラムは、sina、163、sohu などの大量の情報を含む一部の Web サイトの PHP および関連データベースを呼び出すことはなくなります。このようなテクノロジーの恩恵は非常に大きいです。


コードをコピーします
コードは次のとおりです:

ob_start();
$fp = fopen ("output00001.html", "w"); // ファイルを作成し、開き、準備をします。 write fwrite($fp, $content); //php ページのすべてのコンテンツを Output00001.html に書き込み、その後... fclose($fp);
3. 出力キャッシュ ハンドル ob_gzhandler

PHP4.0.4 には新しい出力キャッシュ ハンドル ob_gzhandler があり、前のクラスに似ていますが、その使用法は異なります。 ob_gzhandler を使用する場合、以下が php.ini に追加されます:



コードをコピーします

コードは次のとおりです: output_handler = ob_gzhandler;

このコード行により、PHP は出力キャッシュをアクティブにし、送信するすべてのものを圧縮します。外 。
何らかの理由でこのコード行を php.ini に追加したくない場合は、PHP ソース ファイルが配置されているディレクトリ内の .htaccess ファイルを使用して、デフォルトのサーバー動作 (非圧縮) を変更することもできます。構文は次のとおりです:
コードをコピー
コードは次のとおりです:
php_value Output_handler ob_gzhandler


または、次のように PHP コードから呼び出します:

コードをコピーします
コードは次のとおりです:

ob_start("ob_gzhandler");
キャッシュ ハンドルを出力する方法は確かに非常に効果的であり、サーバーに特別な負荷をかけません。ただし、Netscape Communicator では圧縮グラフィックのサポートが不十分であるため、すべてのユーザーが IE ブラウザを使用していることを保証できない限り、圧縮 JPEG および GIF グラフィックを無効にする必要があることに注意してください。一般に、この圧縮は他のすべてのファイルに対して機能しますが、特に特別なプラグインやデータ ビューアを使用する場合は、ブラウザごとに個別にテストすることをお勧めします。
注:
1. 一部の Web サーバーのデフォルトの出力バッファリングは 4069 文字以上です。つまり、フラッシュが確実に効果的であるようにするには、出力コンテンツが 4069 文字に達する必要があります。 ob_flush() 関数の前に置くのが最適です。次のステートメントがあります:
コードをコピーする コードは次のとおりです:
print str_repeat("", 4096) //output_buffering 値が確実に到達

2. ob_* 系の関数は PHP 自体の出力バッファを操作するため、ob_flush は PHP 自体のバッファを更新するだけですが、flush は Apache のバッファを更新します。したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。 ob_flush は PHP のバッファからデータを解放し、flush はバッファに出入りするすべてのデータをブラウザに送信します。
3. ob_start() を使用した後は、スクリプトの echo/print やその他の出力がブラウザーに表示されないと誤解しないでください。 PHP スクリプトが終了すると、バッファが自動的に更新され、内容が出力されるためです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/740209.html技術記事 ob の基本原理: ob キャッシュがオンになっている場合、エコー データは最初に ob キャッシュに配置されます。ヘッダー情報の場合は、プログラム キャッシュに直接配置されます。ページが最後まで実行されると、ob キャッシュされたデータは...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。