2

header();最初にスクリプトの実行を開始してから数日間、呼び出しがあり、正常に機能するスクリプトがあります。

その後、数日後、ヘッダー情報を変更できないというエラーが発生し始めました。

次に、エラーをグーグルで検索すると、うまくob_start();いきます!ob_end_flush();

エラーはなくなりましたが、私の質問は、なぜそれがなくても数日前に機能ob_start();するob_end_flush();のですか?

この動作の背後にある説明を知りたいです。

ところで、私はheader()このように呼びます:

if(condition is true){
header('Location: anotherpage.php');
}

そして、私はsession_start();最初に を持っています。

4

3 に答える 3

2

以前は、ヘッダー行の前に非ヘッダー出力がありませんでした。これで、ヘッダー行の前に非ヘッダー出力ができました。これは、出力がバッファリングされている場合にのみ機能するため、ヘッダーを実際にその前に出力できます。

于 2012-12-05T12:45:06.817 に答える
1

header()が呼び出される前に何かを出力するコードがあります。print、または同様のechoステートメント、または の前の空白でもかまいません<?php

エラーが消える理由ob_startは、出力がバッファリングされるため、 を呼び出す瞬間まで延期されるためですob_flush

このようにして、コード内のコマンドの順序を台無しにしても、ヘッダーがコンテンツの前に来ることが保証されます。

于 2012-12-05T12:46:16.097 に答える
1

ヘッダーの前にデータを出力することはできません!

ob_start() は出力バッファであり、エコーされたすべてのデータをバッファリングし、すべてのヘッダーなどの後に出力します。

スクリプトが自動的に終了すると、PHP はデータをフラッシュするので、「ob_end_flush()」は必要ありません。

于 2012-12-05T12:45:26.767 に答える