タイトルにあるようexit()
に、header("...")
しばらくするとメソッドに到達できないのはなぜですか? または、到達可能であり、追加することが重要ですか?
例:
header("location: $url");
exit();
タイトルにあるようexit()
に、header("...")
しばらくするとメソッドに到達できないのはなぜですか? または、到達可能であり、追加することが重要ですか?
例:
header("location: $url");
exit();
PHP インタープリターは、header()
コマンドを処理するときにヘッダーのみをブラウザーに送信します。これはLocation:...
、ブラウザに送信しますが、php ファイルの処理を続行することを意味します。exit()
したがって、残りのファイルの処理を停止する必要があります。
呼び出しによって、スクリプトのheader()
実行がすぐに停止されることはありません。リダイレクトしても を呼び出さない場合 exit()
、コードは常に実行されます。
この問題を実証するために、次のコードを検討できます。
header('Location: http://google.com');
file_put_contents('file.txt', 'I was executed, YAY!');
Google にリダイレクトされますが、テキストも出力されますfile.txt
。header()
呼び出しが必ずしもスクリプトの実行を停止するわけではないことが証明されています。exit()
スクリプトがそれ以上実行されないようにするために、常に使用する必要があります。
関数はheader()
アプリケーションを終了しません。header()
への呼び出しであっても、呼び出しに続くコードheader("Location: …")
は実行されます。その出力はたまたま Web ブラウザから見えないだけです。そのためexit()
、リダイレクトに続く呼び出しは間違いなく必要です。
header
は HTTP ヘッダーを送信しますが、アプリケーションの実行を停止しませんが、実際には PHP インタープリターにアプリケーションを終了するように指示しているためexit
、少し競合状態になっています。呼び出す前に約 5 秒待機するようにアプリケーションに指示した場合exit
、ブラウザが HTTP ヘッダーに応答する速度によっては、実行されない可能性が高くなります。