重複の可能性:
PHP の「警告: ヘッダーは既に送信されています」
テスト中に、「ヘッダーは既に送信されました」という問題に遭遇しました。でも、どうしてこうなったんだろう?と思いました。ヘッダーの 1 つは、PHP スクリプト全体が完了するまで不明な Content-Length ですが、この問題をどのように回避しますか?
重複の可能性:
PHP の「警告: ヘッダーは既に送信されています」
テスト中に、「ヘッダーは既に送信されました」という問題に遭遇しました。でも、どうしてこうなったんだろう?と思いました。ヘッダーの 1 つは、PHP スクリプト全体が完了するまで不明な Content-Length ですが、この問題をどのように回避しますか?
出力バッファリングを使用する必要があります。
ob_start();
// write all your code here
header('Content-Length: ' . ob_get_length());
スクリプトの最後に到達すると、出力バッファリングが暗黙的にフラッシュされます
試してみることができることの 1 つは、header()
呼び出しを中断して、PHP が自動的に を設定するかどうかを確認するContent-Length
ことです。
以下も参照してください。ob_start()
編集
PHP がそれを行う方法について話している場合、常にそのヘッダーが書き込まれるとは限りません。出力バッファがいっぱいになると、明示的な長さヘッダーを設定せずにフラッシュします。
を使用してヘッダーを設定する前に何かを出力すると、このメッセージが表示されますheader()
。したがって、ヘッダーを設定する前に、何もエコーしないようにしてください。HTML も空白もありません...何もありません。
他のものを出力に送信する前に、ヘッダーを送信する必要があります。スクリプトが何かを生成すると (ページの静的な部分であれ、動的に生成された出力であれ)、PHP はヘッダーを送信し、その後に出力に送信されたものを送信します (バッファリングを使用しない限り)。 、他の回答で言及されています)。
したがって、ファイルを開始して<?php
、一部のエディターが適切なファイル コンテンツの前に配置するのが好きな BOM 文字さえも含まれていないことを確認する必要があります。