headerでexitしてなかった……

まっちー

まっちー

PHPでHTTPヘッダを送信する関数に「header」がありますよね。

僕は今まで、この関数はリダイレクト処理くらいにしか使ったことがなかったもんで、こいつはリダイレクト処理を行ってくれる、CakePHPでいうところの$this->redirect()と同じ関数だと思ってました。

いや、まあ実際に$this->redirect()も中身を見てみると最後にheaderをやってるんですが、これってheaderが読み込まれた時点でページ遷移が発生するわけじゃなかったんですね。

知らなかったこと

header('Location: test.php');

$a = $b = 1;

$a + $b;

みたいなことを書いておくと、$a + $bまでの処理を行ってから、test.phpに飛ぶみたいですね。

なので、headerでリダイレクト処理を行うときは、exitをつけるのを忘れないようにしないといけないみたいです。

header('Location: test.php');

exit;

今までたまたま上手く行っていたから気にしたことなかったんですけど、この前headerが上手く動かない変なバグに出会いまして……いろいろと原因を探ってみたら、このexitが足りないのが問題だったようです。これを加えたら、正常に動いた。

CakePHPの$this->redirect()も、見るとちゃんとexitしてました。

まとめ

うちの先輩プログラマにも「そんなの常識だよ?誰もがやってる当り前の処理だよ。お前はマジでプログラマの風上にも風下にも風前にも風後にも風左にも風右にも片隅にもおけないな」って言われました。
俺だけがやっていなかったようです。

今後は気をつけたいと思います。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL