ホームページ  >  記事  >  バックエンド開発  >  PHPのキャッシュメカニズム

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

巴扎黑
巴扎黑オリジナル
2016-11-23 10:19:562444ブラウズ

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 ファイルを直接生成する代わりに、データをキャッシュに入れます。 PHP プログラムの実行が完了するまで、モジュールのキャッシュされたデータを使用して、ヘッダー ファイルを含む HTML コードが生成されます。

1. キャッシュが有効になっていません (これがデフォルトです)。この時点でヘッダー情報の変更エラーが発生します。

2. キャッシュ メカニズムが有効になっています

<?php
echo "123";
header("Content-type:text/html;charset=utf-8")
echo "456";
?>

上記 2 つの例では、echo "123"; の場合、HTML コードが生成されています。 3 行目に到達すると、header 関数はヘッダー ファイル情報を変更できず、エラーを報告します。例 2 では、ob_start(); が echo "123" のときにデータが書き込まれます。このとき、HTML ページは生成されず、プログラムが実行されると、そのデータもキャッシュ モジュールに出力されます。キャッシュ モジュールは、エラーが報告されないように完全な HTML ページを生成します

2 番目に、PHP のキャッシュ メカニズム関数とそれを有効にする方法

上で述べたように、ob_start() 関数はキャッシュ モジュールを有効にできますが、この関数はのみですこのページが開きます。必要に応じて、php.ini ファイルを変更し、output_buffering オプションを見つけて、output_buffering = 4096 に変更します (数値はキャッシュ サイズを表します)。

PHP キャッシュ メカニズムをよりよく理解するために試してみることもできます。この時点で、PHP は出力を停止します。

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

ob_end_flush。 () は出力バッファを終了し、バッファ内の内容を出力します。この後、出力は通常の出力になります。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。