2017-12-01 15 views
2

シナリオ1:ヘッダが失敗することが可能であった場合、私は思っていたPHPがリダイレクトを混乱させる可能性がありますか?これは可能ですか?

<?php 
header('Location: accessdenied'); 
die(); 
//code to delete your entire database below 
?> 

仮に:2

<?php 
header('Location: accessdenied'); 
//code to delete your entire database below 
?> 

シナリオ?

あなたが実行したくないコードがあり、あなたがdie()を残したとします。シナリオ1のコードが何らかの形で実行される可能性があります。

シナリオ2私は以下のコードが決して実行されないという事実を知っています。

私の質問は、同じことがシナリオ1の場合も当てはまりますか?

感謝:)

P.S.私はこれがうまくいくシナリオがあることを認識しています(if文を代わりに使用することができますが、ヘッダーが機能しないことを知りたい場合は、下のコードを実行してください)。

+2

を失敗しますか? – David

+5

シナリオ1のコードは常に実行されます。 'header()'を呼び出すと、サーバが残りのスクリプトを処理することはありません。それはそれに関してエコーと変わりありません。リダイレクトはクライアント側で発生します。サーバーが '' header() ''を呼び出すと、クライアントにコマンドを呼び出すことになります。クライアントがそのコマンドに従うかどうかは、サーバが次に行うことには関係しません。 –

+4

"実行したくないコードがあるとしましょう..."なぜそれがあるのですか? – Mischa

答えて

9

header() appends header()を呼び出した後のコードは、リダイレクトされていても実行されますが、ブラウザはまだリダイレクトされますが、コードはリダイレクトされますが、

+0

今日、 !ありがとうございました! – GrumpyCrouton

+0

それはまさに私が知りたかったことです、何かを教えてくれてありがとう! – rakupu

+0

ヘッダーが乱れることはありますか? (例えば、ユーザーをリダイレクトして空白のページを表示しない) – rakupu

0

exit()またはdie()は、ヘッダーのリダイレクト後に使用することをお勧めします。そうしないと、不要なコードが実行される可能性があります。コード実行がサーバーで停止します。

0
あなたは(必ず使用出口を作成する必要があり

)または(死ぬ)ヘッダ関数の後、あなたのシナリオ#1は、あなたがそれをテストしたときに何が起こる

http://php.net/manual/en/function.header.php

header("Location: http://www.example.com/");/* Redirect browser */ 
/* Make sure that code below does not get executed when we redirect. */ 
exit;