-2

重複の可能性:
PHP の「警告: ヘッダーは既に送信されています」

こんにちは、自分のサイトにないページの 404 ステータス コードを取得できません。私の .htaccess は次のようになります。

RewriteEngine オン

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

そして、私のすべてのページはそこから index.php に移動し、そこからブートストラップに移動し、そこでエラーコントローラーに送信されます。エラービューで次のようにします:

header("HTTP/1.1 404 見つかりません");

しかし、「ヘッダー情報を変更できません - ヘッダーは既に送信されました」というエラーが表示されます。この行を削除すると、200 Ok ステータスになります。これは、すべてをindex.phpに送信し、そのステータスが200 OKであるためだと思います。では、これらのファイルを .htaccess から変更するにはどうすればよいでしょうか? または、これに対処する別の方法がありますか?ありがとう

4

2 に答える 2

1

おそらく、HTTPヘッダーを間違った場所に送信しています。

MVC PHPフレームワークを使用している場合は、フレームワークのドキュメントを読んで、ディスパッチ、ルーティング、およびリクエスト処理プロセスを完全に理解する必要があります。答えはフレームワークによって異なります。リクエストの処理とヘッダーの送信に関する情報が必要です。

そうでない場合は、index.phpとブートストラップファイルが独自のものであるため、ビューファイルではなく、ブートストラップファイルまたはコントローラーレベル(エラーコントローラー?)で404ヘッダーを送信する必要があります。ビューレイヤーは、MVC構造でヘッダーを送信するのに適した場所ではありません。

また、ヘッダーを送信する前に、クライアントに出力を送信していないことを確認することを忘れないでください。

于 2012-11-04T22:52:41.227 に答える
1

foozy の回答に加えて、開始<?phpタグの前に空白 (スペース、タブ、改行など) がないか PHP コードを確認してください。見つかった場合は、削除してください。

空白があると、「ヘッダー情報を変更できません」というエラーが発生します。

exit('stopped');これをデバッグする別の便利な方法は、 の前に右を置くことheader("HTTP/1.1 404 Not Found");です。ページを更新してソースを表示すると、理想的にはstopped最初に印刷されたものとして表示されるはずです (前に空白はありません)。間隔が存在する場合、問題があります。

于 2012-11-05T00:46:50.120 に答える