PHP でヘッダーが送信済みのエラー
PHP スクリプトを実行すると、次のようなエラーが発生することがあります。
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
これは、HTTP ヘッダーが次の場合に発生します。出力が生成された後に送信/変更が試みられました。 header()、setcookie()、session_start() などの関数では、出力を行う前にヘッダーを送信する必要があります。
ヘッダー送信済みエラーの原因
意図しない出力:
- UTF-8 バイト オーダー マーク (BOM)
- 以前のエラー メッセージまたは通知
意図的な出力:
- print、echo、その他の出力を生成する関数
- Raw HTMLセクション
出力ソースの識別
エラー メッセージには、通常、ヘッダー関数が呼び出された行 (例: 23 行目) と、途中で出力されたソース (例: 行) が含まれます。 12).
解決策
時期尚早は避ける出力:
- 関数とテンプレート スキームを使用してアプリケーション フローを再構築します。
- メッセージの書き込みまたは出力のレンダリングの前に header() 呼び出しが行われるようにします。
特定の修正原因:
-
印刷/エコー: 出力を管理するには、trigger_error、ob_flush、または var_dump などの関数を使用します。
-
Raw HTML: 場所HTML以前のフォーム処理とスクリプト条件セクション。
-
空白: 先頭の空白を削除するか、省略表現 (=) タグの代わりに長い PHP タグ () を使用します。
-
UTF-8 BOM: ファイルを「UTF-8 (BOM なし)」として保存するか、 BOM を削除する 16 進エディタ。
-
?>: 末尾の PHP 終了タグを省略します。
-
その他: PHP 拡張機能を確認するか、暗黙的な出力を引き起こす可能性のある php.ini 設定。
-
エラーメッセージ: isset() または @() を使用してエラーを回避し、実行を遅らせるか、抑制します。
出力バッファリング (回避策):
- 出力を有効にするphp.ini で Output_buffering を設定するか、ob_start() を使用してバッファリングします。
- 使用バイナリ コンテンツが生成される場合は、ob_clean() を実行します。
- 出力バッファリングは、適切なアプリケーション構造の代替ではないことに注意してください。
フォールバック回避策:
-
HTML メタ タグ:
-
JavaScript リダイレクト: クライアントをリダイレクトするには、location.replace() または location.href= を使用します。
以上がPHP で「ヘッダーはすでに送信されました」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。