2011-10-28 5 views
3
<? 
echo "lalala"; 
header("Location: http://www.google.com/"); 

私はこれをプレーンなPHPファイルに入れ、mod-php(PHPバージョン5.3.2-1ubuntu4.10)を備えた標準apache2サーバーで配信すると、Googleへのリダイレクトが動作します。コンテンツが既にエコーされた後、このヘッダーの場所がリダイレクトされるのはなぜですか?

<? 
echo "lalala"; 
flush(); 
header("Location: http://www.google.com/"); 

このコードは明らかに正常なリダイレクトを生成しません。

私の質問は、最初のコードがどのように処理されているのか、なぜ動作するのかです。私はこのようなことができなかった時を覚えているからです。 mod-phpまたはapacheはインテリジェントなので、リクエスト全体をバッファし、内容の前にヘッダーを整理できますか?

そして:私は手動で出力をフラッシュしていないことを確認した場合

が、私はこれに頼ることはできますか?なぜなら、私のアプリケーションはもっと簡単になるからです...

答えて

2

ヘッダ機能は、HTTPレスポンスのHTTP共通ヘッダを付加します。したがって、リダイレクトが設定され、ブラウザは出力を表示する前に302メッセージを取得します。

flush order phpが、すでに呼び出された時点で準備されているhttp応答を送信します。そのため、2番目のコードではヘッダーが設定されません(ANY出力を送信する前に設定する必要があります)。

そして、PHPいけない出力単一の事まで:スクリプトがあなたがどこかに、スクリプト内の出力を送信するように設定し

  • (エラーが構文解析を停止しても)処理され

    • 最後にフラッシュ()

    、出力制御http://www.php.net/manual/en/intro.outcontrol.php

    にこれをチェック
  • 関連する問題