Warning: Cannot modify header information - headers already sent
PHPでHTTPヘッダが既に送信された後にヘッダを変更しようとした際のエラー
概要
PHPでHTTPヘッダ(header()、setcookie()、session_start()など)を送信しようとした際、既に何らかの出力がブラウザに送信されている場合に発生するエラーです。
エラーメッセージ
Warning: Cannot modify header information - headers already sent by (output started at /path/to/file.php:10) in /path/to/another.php on line 20
原因
- HTML出力後のheader(): HTMLやテキストの出力後にヘッダを送信
- BOM(Byte Order Mark): UTF-8 BOM付きファイル
- 空白や改行:
<?phpの前や?>の後の空白 - echoやprint: ヘッダ送信前に出力
- エラーメッセージ: WarningやNoticeの出力
解決策
1. 出力前にヘッダを送信
| |
2. リダイレクト時の注意
| |
3. 出力バッファリングを使用
| |
| |
4. BOMを削除
| |
5. ファイル末尾の閉じタグを省略
| |
6. 空白の確認
| |
7. インクルードファイルの確認
| |
| |
8. エラー表示を抑制(本番環境)
| |
よくある間違い
- UTF-8 BOM付きでファイルを保存する
<?phpタグの前に空行を入れる- includeしたファイルに閉じタグと空白がある
- var_dump()やprint_r()でデバッグ出力した後にヘッダを送信
関連エラー
参考リンク
PHP の他のエラー
この記事は役に立ちましたか?