PHPのheader()でリダイレクトしたあとはexit()を忘れないようにする

PHPのheader()を使ってリダイレクト処理を行うことがよくありますが、処理を行ったあとはexit()でスクリプトの終了を明示する必要があります。

 

exit()しないと意図しない動作になる可能性がある

例えば以下のスクリプトはユーザー認証を行って、成功すればメールを送信するというものです。

<?php
header('Location: /');
exit();

 

ここではheader()はreturnと同じような感覚で使っています。

しかし、header()でリダイレクトが成功したからといってそこでスクリプトを終了するわけではありません。

例えば以下のようなコードにするとvalidate_user関数の戻り値に関係なくmb_send_mail()が実行されてしまいます。

<?php
if (validate_user($user)) {
    header('Location: /');
}
send_mail_to_user($user)

 

対処法

記事のタイトル通りですが、リダイレクトしたらexit()を使ってスクリプトを終了します。

以下のように記述するとvalidate_user関数でユーザー認証が失敗した場合はsend_mail_to_user関数は実行されません。

<?php
if (validate_user($user)) {
    header('Location: /');
    exit();
}
send_mail_to_user($user);

 

まとめ

簡単にまとめると、header()でリダイレクトを行ったあとはexit()を忘れないようにしましょうという感じです。

exit()の書き忘れで意図しない動作をしたりエラーを吐いたりするので、exit()を書き忘れていないか確認するようにしましょう。