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_get_contents() この関数は、これらの出力を文字列に変換するのと同じです。
ob_end_flush() は、この後、出力は通常の出力になります
ob_end_clean() は出力バッファを終了し、バッファ内の内容を破棄します。