0

CodeIgniterで400エラー処理をテストしたときに奇妙なことに遭遇しました。

メッセージ:ヘッダー情報を変更できません-ヘッダーは既に送信されています(出力は...で開始されました)

そして、httpステータスコードは常に200ですが、最終的に、の前に新しい行があることがわかりました<?php ...。それから私はphpドキュメントをチェックしました、これを見つけました:

header()は、生のHTTPヘッダーを送信するために使用されます。HTTPヘッダーの詳細については、»HTTP/1.1仕様を参照してください。

通常のHTMLタグ、ファイル内の空白行、またはPHPから実際の出力を送信する前に、header()を呼び出す必要があることに注意してください。

では、PHPでhttpステータスコードを適切に設定して、出力の前にあることを確認するにはどうすればよいですか?私はphpプログラミングに不慣れです。返信ありがとうございます!

4

3 に答える 3

2

では、PHPでhttpステータスコードを適切に設定して、出力の前にあることを確認するにはどうすればよいですか?

出力を作成する前に呼び出しheader()ます(セクションの外側に空白文字を配置することを含む<?php)。

于 2011-11-27T16:24:09.703 に答える
1

他の人が言っているようheader()に、他の出力の前にヘッダーを送信する(つまり、使用する)必要があります。

よくあることの1つは、PHPの終了タグの後に、誤って改行が含まれているファイルを含めることがあるということです。例えば

<?php
/*
 * This is a file of PHP code
 */


/*
 * file ends here
 */
?>

__________________________ (actual end of file)
# unexpected newline above gets sent as output

この可能性を減らすために、PHPの終了タグを意図的に除外することができます。ファイルは最後までPHPとして解析されるため、含まれているファイルから誤った改行やスペースが送信される可能性ははるかに低くなります。

エディターによっては、空白(キャリッジリターン、スペース、タブ)を表示するように設定することもできます。これは、スクリプトから予期しない出力を排除しようとするときに役立ちます(たとえば、EclipseとNotepad ++の両方で実行できます)。

于 2011-11-27T16:47:20.137 に答える
0

header()何かが訪問者に返される前に、あなたの機能をしてください。

を呼び出す前に何かが返される場所を特定できない場合は、PHPスクリプトの先頭に関数をheader()追加してください。ob_start()

それは機能しますが、コードをクリーンアップし、データが出力される前に出力されないようにすることをお勧めします。パッチソリューションにフォールバックせずに、自分のコード内で何が起こっているかを常に把握しておくことをお勧めします。

于 2011-11-27T16:26:12.047 に答える