このコード:
ob_start();
ob_end_flush();
header('foo');
警告をスローします
Warning: Cannot modify header information - headers already sent
これの間:
echo '';
header('foo');
しません。
それらの間に大きな違いは見られません。
では、この動作は予期されたものですか?
PS: PHP 5.3.2
このコード:
ob_start();
ob_end_flush();
header('foo');
警告をスローします
Warning: Cannot modify header information - headers already sent
これの間:
echo '';
header('foo');
しません。
それらの間に大きな違いは見られません。
では、この動作は予期されたものですか?
PS: PHP 5.3.2
これに対する私の最初の反応は、「これは私が期待する動作です」でしたが、使用している PHP のバージョンに依存するいくつかの微妙な点があることがわかりました。
最初に、( 5.3 を使用していると仮定して) テストに適用されるため、私の最初の反応が何であったかを説明しましょう。
ob_end_flush()
暗黙的に を呼び出しflush()
、コンテンツが生成されているかどうかに関係なく、ヘッダーをブラウザーにプッシュします。
echo '';
一方、基本的にはNOOPです。エンジンに何もしないように要求したため、何も起こりません。
ただし、もう少し調査すると、OBのimplicit_flush
オプションは実際にはデフォルトでオフになっていることが示されているため、オプションを明示的に有効にしない限り、実際には違いはありません。
さらに、この動作は5.2.2 より前または 5.4.0 以降では見られないため、次の訪問先はこれとこれを比較することでした。C をまったく読めなくても、5.3 と 5.4 の出力処理に大きな違いがあることは明らかです。かなり大幅な書き直しが行われています。
現実のコミットメントのために、私はまだそれを適切に引き離して、この特定の問題に関連するキーコードを見つけていませんが、すぐにそうし、そうしたらこの回答を拡張します.
概要: