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