ホームページ > バックエンド開発 > PHPチュートリアル > PHPのキャッシュメカニズム

PHPのキャッシュメカニズム

巴扎黑
リリース: 2016-11-22 16:48:45
オリジナル
980 人が閲覧しました

PHP プログラムを作成するときによくこの問題に遭遇します。

header() 関数、session() 関数、Cookie 関数の使用を含めて、問題が発生する可能性があります

PHP プログラムは次のエラーを報告します:


ヘッダー情報を変更できません - ヘッダーはすでに送信されました (出力は

で開始されました)

ヘッダー情報を変更できません。このエラーを解決するには、2 つの問題を理解する必要があります。

まず、http プロトコル

http プロトコルでは、サーバーは HTML ファイルをブラウザーに出力します。HTML ファイルは 2 つの部分で構成され、1 つの部分はページ自体のデータであり、もう 1 つの部分には HTML ページのヘッダー情報が含まれます。ページを表示するエンコード形式、HTML データのサイズ、ジャンプするかどうか、キャッシュするかどうかなど、多くのデータが含まれます。これらの HTML ヘッダー ファイルの情報は、一度生成されると変更することができません。これが上記の理由です。エラー、ヘッダー情報を変更できません

2 番目に、PHP のキャッシュ メカニズム

PHP プログラムが実行されているとき、キャッシュには 2 つの部分があります。1 つはプログラム キャッシュで、これはプログラム内のプログラムのデータ キャッシュとして理解されています。もう 1 つは PHP が提供するキャッシュ モジュールです。PHP モジュール キャッシュがオンになっている場合、プログラム内にデータが保存されます。 PHP プログラムの実行が完了するまで、HTML ファイルを含むモジュールのキャッシュ データが 2 つの例として生成されます。

1. on (デフォルトはこれです)

<?php
echo "123";
header("Content-type:text/html;charset=utf-8")
echo "456";
?>
ログイン後にコピー

この時点で、ヘッダー情報を変更できないエラーが表示されます。

2. キャッシュ メカニズムをオンにします

<?php
ob_start() ; //开启页面缓存
echo "123";
header("Content-type:text/html;charset=utf-8")
echo "456";
?>
ログイン後にコピー

上記 2 つの例では、キャッシュ状態は有効になっていません。 3 行目では、ヘッダー関数はヘッダー ファイル情報を変更できず、エラーが報告されます。例では、ob_start(); がオンになります。キャッシュ (ob は、output_buffer)、echo "123" の場合、データはキャッシュ モジュールに書き込まれ、その後 header() 関数が実行されます。この時点では HTML ページは生成されず、その後 echo "456" になります。プログラムの実行後、キャッシュ モジュールのデータは完全な HTML ページを生成します。2 番目に、PHP のキャッシュ メカニズムの機能と有効化方法。前述したように、ob_start() 関数はキャッシュ モジュールを開くことができますが、この関数はこのページのみを開きます。必要に応じて、php.ini ファイルを変更し、output_buffering オプションを見つけます。これをoutput_buffering = 4096に変更します(OnでもOK)。数値はキャッシュサイズを表します。

PHP キャッシュ メカニズムをよりよく理解するために試してみることもできます。この時点で、PHP は出力を停止し、後続のすべての出力がファイルに転送されます。内部バッファ内。

ob_g​​et_contents() この関数は、これらの出力を文字列に変換するのと同じです。

ob_end_flush() は、この後、出力は通常の出力になります

ob_end_clean() は出力バッファを終了し、バッファ内の内容を破棄します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート