PHPで、別ページや別サイトにリダイレクトさせたい場合、header関数のLocationを使いますが、何かの原因でうまく動作しない場合があります。
今回はこの不具合の原因と対策を解説します。
原因:header(Location:〜)の記載の前に画面上に何か表示してしまっている。
header(‘Location: 〜の前にに、画面上に何か表示させる処理を行っているとうまく処理されません。
エラーになってしまう例:
<?php //← 半角スペースがある為、リダイレクトしない。 header('Location: https://tamoc.com'); exit; ?>
<?php // ↑ 改行されている為、リダイレクトしない。 header('Location: https://tamoc.com'); exit; ?>
<p>リダイレクトテスト</p> <?php /* ↑ header関数の前に画面表示するHTMLが記載されている為、リダイレクトしない。 */ header('Location: https://tamoc.com'); exit; ?>
このような記載をすると、以下のようなエラー(警告)が表示され、処理が止まってしまいます。
Warning: Cannot modify header information – headers already sent by (output started at …
php.ini の output_bufferingの設定をオンにすると、上記のようなエラーが表示されずに処理されますが、サーバーが変わったり設定が変わったりすると同じ現象が起こる場合があるので注意が必要です。
その他、Location使用時の注意点
exitを誤動作防止の為に記載する。
header(‘Location: 〜’)の後に、exitを記載することは必須でありませんが、
exitをつけないと、Location指定したにもかかわらず、phpの処理が続いて、誤動作する場合もあります。
安全の為、習慣のように記載したほうが良いかと思います。
<?php header('Location: https://tamoc.com'); exit; ?>
「Location」と「:」の間に半角スペースを入れない。
「Location:」という塊で1つの単語として認識するので、「Location」と「:」の間にスペース文字があるとうまく動作しません。
header('Location : https://tamoc.com'); // 誤:エラーになり指定URLへジャンプしません。 header('Location: https://tamoc.com'); // 正:正常に指定URLへジャンプします。
因みに、「Location」の「L」は、大文字でも小文字でも問題なく動作します。
また、「:」の後の半角スペースはあってもなくても問題ありません。
コメント