🧑‍💻

#09 PHP でリダイレクトがうまくいかないときに確認すること

2024/07/26に公開

はじめに

今回は備忘録としてheader 関数でよくあるエラーの原因をまとめました。
「PHP でリダイレクトしたいのにうまくいかない…。」
そんな方に確認していただきたい内容です。

PHPでリダイレクトする方法

header 関数は、HTTP ヘッダを送信する役割があります。
Location を使うことで指定した URL へ遷移することができます。

<?php
header("Location: http://www.example.com/");
exit;
?>

※ URL は絶対パスでも相対パスでも指定できます。
※ リダイレクト以降のコードが実行されないよう exit 関数で処理を終了させています。

よくあるエラーとその原因

1. HTML の出力後に header() を呼び出している

例1
<html>
</html>
// header() の前に出力している
<?php
header("Location: http://www.example.com/");
exit;
?>

header() はすべての出力の前に呼び出す必要があります。
echo 、print 、HTML 等の出力前に呼び出してください。

2. header() の前に不要なスペースや改行がある

例2-1
<?php

header("Location: http://www.example.com/");
// header() の前で改行している
exit;
?>
例2-2
 <?php
header("Location: http://www.example.com/");
// php タグの前にスペースがある
exit;
?>

php タグの中だけでなく、php タグの前にスペースや改行がある場合も
HTML を出力したとみなされエラーになります。

3. 記述を間違えている

例3
<?php
header("Location : http://www.example.com/");
// 「"Location : 」では「:」の位置が正しくない
exit;
?>

正しくは「("Location: http~");」です。
「:」とスペースの位置が正しくないといけません。

最後に

リダイレクトさせるにも細かい決まりがありました。
見落としやすい部分もあるので、注意してコーディングしていきたいですね。
以上です。

出典: https://www.php.net/manual/ja/function.header.php

Discussion