2017-06-28 1 views
0

Stack Over Flowにはphp - Should I call exit() after calling Location: header?do i need to use exit after header("Location: http://localhost/...");?のような多くの類似した質問があります。php - Location:ヘッダーを呼び出した後にexit()を呼び出す必要があるのはなぜですか?

以下のような回答があります。

間違いはありません。そうでなければ、スクリプト実行は で終了しません。別のヘッダーだけを設定しても、リダイレクトするには不十分です。

-

ヘッダ()が自動的に実行されるから スクリプトを停止することはありませんので、あなたは、exit()を呼び出す必要があり

- またはそれがない場合には(私は正直にその上の100%ではありませんよ)、 それは間違いなくスクリプトを即座に停止しません。

しかし、誰かがスキップしたり、コードをバイパスする方法がheader('Location: http://www.example.com/login.php')のようにわからないのですか?誰かがそれをやりますか?これはPHPコードなので。このコードはサーバーで実行されます。もし誰かがこのコードをスキップ/バイパスできれば、なぜスキップ/バイパスできないのですか?exit()

+1

通常、リダイレクトを強制したい場合、リダイレクトの下のどのようなコーディングが実行されるので、 'die( 'Location:redirect_url')); ' です。サーバーの処理はリダイレクトより高速です。 – bugscoder

+0

それは私が推測するコードの構造とコードにアクセスする方法に依存します。誰かがウェブを介してコードにアクセスするためにcurlを使用している場合、おそらくリダイレ​​クトに従っていない可能性があります。 – RamRaider

+0

これは必須ではありませんが、exitを使用すると、リダイレクト時に以下のコードは実行されません。 – Nawin

答えて

2

ヘッダーは、ブラウザにリダイレクトするよう要求するデータ行です。残りのページは引き続きPHPによって提供され、ヘッダコマンドが実行されないようにするだけでクライアントが見ることができます。

これを防止しないと、PHPはヘッダーコールの後でも全身を送信します。そのボディは受信者に完全に利用可能です。

+0

ありがとう、今私はそれを理解した。しかし、誰かがヘッダーコマンドの実行を妨げるのはどうですか? –

+0

wgetのようなコマンドラインクライアントでは、リダイレクトに従わないように指示するだけで回避できます。 –

関連する問題