PHPのheader関数でリダイレクトする方法とよくあるエラー

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

phpコーディング

別のページやサイトに移動させたいとき、header関数をよく使います。
フォーム送信完了後に自動的に別のページに遷移させたり、ログイン処理の判定など、使い方も様々ですね。

PHPでのリダイレクトの方法は簡単ですが、header関数の前に何かしら出力してしまいエラーにハマる人も多いようです。

そんなよくあるエラーもご紹介しますので、なぜか上手くいかない人もこれをチェックすればすぐに解決できるでしょう。

 

パラメータ「Location」を付加する

PHPでのリダイレクトの方法は以下のようにheader関数にLocationパラメータを付加し、ヘッダーを書き換えます。

以上です。

上記のようにhttp://から始まる絶対パスの他に、../などから始まる相対パスでも記述できます。

exit は誤作動防止のために原則付けるようにする

exitは必須ではありませんが、ページ遷移後の処理を止めたい場合は記述しましょう。

exitを記述しなかったばっかりに、以下のような誤作動を起こすこともあるため、基本的には付けるようにした方が良いでしょう。

exit を付けないとリダイレクト後も処理は継続する

exitを付けなかったばかりに、メールを誤送信してしまったケースを紹介します。

上記はリダイレクトの後にメール送信のスクリプトがありますが、リダイレクト後に’ほげほげ’という件名でテストメールが誤送信されてしまいます。

以下のようにexitを付けることで、その後の処理は中断されるため、必ずexitは付けるようにしましょう。

参考:PHPでメールを日本語で送信する簡単な方法(mb_send_mail)

header関数でのリダイレクト時によくあるエラー

上記のように記述してもページ遷移しない場合は以下の様なエラーが考えられます。

header関数よりも前にechoやhtmlなど、何かしら出力してしまっている。

header関数よりも前に何かしら出力すると、その時点でヘッダーが送信されるため、エラーになります。

文字を表示させたらダメということです。

(改行やスペース含む)

例えば以下の例です。

上記はよくやってしまいがちですが、header関数より前に何らかの出力をすると、以下のようなPHPエラーが発生します。

Warning: Cannot modify header information – headers already sent by (output started at …

既にヘッダーが送信されているため、header関数を実行できないというエラーです。

header関数を記述する際は、その前で何も出力しないようにしましょう。

header関数の前に何も出力していないのにエラーになる!

ちゃんと記述しているのにエラーが出る場合は、以下の原因も考えられます。

 

  • UTF8で保存する際「BOM有り」で保存してしまっている。

「BOM有り」で保存すると、ソース上確認することはできませんが、ソースの一番始めに「UTF8だよ」という記述が追加されてしまうため、エラーとなります。

「BOMなし」で保存しましょう。

参考:UTF-8の場合、「BOMなし」で保存すること

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*