」の後にスペースを含めず、ヘッダーを使用する前に出力を行うことはできません。 ! 3. ヘッダー以降の PHP コードも実行されます。続き: 問題: 一般に、ヘッダー関数の前の入力内容がヘッダー関数の前に表示されません。"/> 」の後にスペースを含めず、ヘッダーを使用する前に出力を行うことはできません。 ! 3. ヘッダー以降の PHP コードも実行されます。続き: 問題: 一般に、ヘッダー関数の前の入力内容がヘッダー関数の前に表示されません。">

ホームページ  >  記事  >  バックエンド開発  >  PHPヘッダー障害の原因の分析と解決策

PHPヘッダー障害の原因の分析と解決策

黄舟
黄舟オリジナル
2017-02-28 09:33:021769ブラウズ

PHP で header("location:test.php") を使用してジャンプする場合は、次の点に注意してください:

1. location と ":" 記号の間にスペースを入れることはできません。スペースを入れないとエラーが発生します。起こる。

2. ヘッダーを使用する前に、インクルード ページのタグ「?>」の後にスペースを含めないでください。 !

3. ヘッダー以降の PHP コードも実行されます。

続き:

問題: ヘッダー関数の前にコンテンツを入力する

一般的に、同様のものには setcookie() 関数やセッション関数が含まれます。出力ストリームの情報。 header() が実行される前に echo などのステートメントがある場合、後で header() が発生したときに、「警告: ヘッダー情報を変更できません – ヘッダーは既に送信されています…」というエラーが報告されます。つまり、これらの関数の前にテキスト、空白行、復帰などを含めることはできません。exit() 関数を header() 関数の後に追加するのが最善です。たとえば、次の間違った記述では、2 つの PHP コード スニペットの間に空白行があります:

//これは空白行である必要があります

原因:

PHP スクリプトの実行が開始されると、http が送信される可能性があります。メッセージ ヘッダーは、ヘッダー (ヘッダー) 情報と本文情報を同時に送信します。http メッセージ ヘッダー (header() または SetCookie() 関数から) はすぐに送信されず、リストに保存されます。ただし、スクリプトがヘッダー以外の出力を送信すると (HTML または print() 呼び出しなど)、PHP は最初にすべてのヘッダーを送信する必要があります。その後、HTTP ヘッダーを終了し、メイン データの送信を続行します。これ以降、ヘッダー情報を追加または変更する試みは許可されず、上記のエラー メッセージのいずれかが送信されます。

解決策:

キャッシュ(output_buffering)を開くようにphp.iniを変更するか、output_buffering=0をoutput_buffering=4096に変更するか

、またはプログラム内でキャッシュ関数ob_start()、ob_end_flush()などを使用します。原則として、output_buffering が有効な場合、スクリプトが出力を送信するときに PHP は HTTP ヘッダーを送信しません。代わりに、この出力を動的に増加するキャッシュにパイプ処理します (集中出力メカニズムを持つ PHP 4.0 でのみ使用可能)。ヘッダーは実際には送信されないため、ヘッダーを変更/追加したり、Cookie を設定したりすることができます。すべてのスクリプトが終了すると、PHP は自動的に HTTP ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。

上記は、PHP ヘッダー障害の原因の分析と解決策です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

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