phpでheader関数を使って画面遷移する際に気を付ける事

画面リダイレクト

記事関連ワード

php リダイレクト 画面遷移 exit()

はじめに

元プログラマー(主にC#.netメイン)にして、現在、焼肉屋という異色な経歴の持ち主のじゅんじゅんです。

phpは仕事で使った事はなく(ほぼWEB系の経験は無し)、htmlとphpの勉強は焼肉屋になってから始めました。

近くに質問できる人がいないので、ネットで調べながらの作業をしているのですが、全く無知にもheader()関数を使って画面遷移させており、ようやく先日誤っている事に気づいたので恥ずかしいですが記事にしてみたいと思います。

header()関数の使い方

header("Location:index.php");
(header("Location:https://junjun.net/index.php");
exit();


素人の私に言われるまでもなくご存知の通り、『header("Location:相対パスやURL")』を使って画面遷移させるわけですが、 私は、「php 画面遷移」と検索してheader()関数を発見し、画面遷移させたい箇所でheader()関数を使用していました。

幸い?不具合もなく、画面遷移できていたのですが、最近没頭してブログ記事を書けていない理由。

お肉の通販サイトを作っているのですが、その中で入力チェックがエラーの場合、画面遷移させる処理を書いていたのですが、 TESTしていると、何故か入力チェックにエラーがあるにもかかわらず、チェック後の処理が走っている

理由がわからず調べていると、header()関数を使ってリダイレクトさせたらそこで処理は終わると勝手に思っていたのが間違いで、header()関数後の処理を終えてからリダイレクトされるようです。

もちろん、これまで何度もheader()関数を使っていましたが、header()関数の後に走ってはいけない処理がたまたま無かっただけで気づかなかったのですが、 そういう場合は必ずしも対策しなければならないという事は無いでしょうが、意識はしておかないと、思わぬバグを仕込んでしまう可能性があります。

なので、上のソース上では赤字で書いたexit();を必要に応じて書くように注意しましょう。

exit(); を記述しておけば、その後の処理は走りません。

最後に

複数人で作業をしていると、誰かしらが間違いに気づいてくれるので、良いのですが、 大した知識も経験もないのに自分一人で調べて作業していると、恐ろしい爆弾を仕込んでいるのではないかとかなりビクビクします。

恐らくこのheader()関数の後にexit()を記述するというのは常識でしょう。でも気づかない恐ろしさ。

このサイトのようなブログや、お店のWEBページ、社内のシステムであれば多少間違っていてもゴメ~ンで済むのですが、 お店の会計システムや通販サイトなど、お客様やお金がからんでくるとゴメンで済まない場合もあるので、 勉強をしっかりして、TESTを入念に行わないと恐ろしい事態を招くかもしれません。

とりあえず、一つ賢くなりました。

記事作成日:2018.04.06

Facebookへ Twitterへ Feedlyへ RSSへ このエントリーをはてなブックマークに追加