PHPのheader関数で別のページに移動させる方法【注意点も解説】

こんにちは、最近やっと購入したノートパソコンのキーボードに慣れてきたひろです。

PHPでウェブ開発をしている際に、

ログインしていない人をトップページにアクセスさせる方法はないのかなぁ……。

 

など、ユーザーを別のページに転送したい!と思ったことはありませんか?

今回は、そんなときに使えるheader関数を紹介します!このheader関数を使うことによって、別のページにアクセスさせることができます。是非参考にしてみてください。

phpのheader関数を使うことで別のページにリダイレクトできる

ここでのリダイレクトというのは、「あるページから別のページに転送すること」です。エンジニアでの会話でよく使う言葉ですので、ここで覚えてしまうことをおすすめします。

header(‘Location:URL’)で指定したページにリダイレクトできる

このheader関数の使い方ですが、引数(括弧の中)に

とすることで指定したURLにリダイレクトすることができます。例えば、

とするとウェブカツのトップページにリダイレクトさせられます。ここのURLは相対パスでも問題ありません。

最初の例でいうと、

このような処理を導入することにより、このページにはログインしていないユーザーはトップページにリダイレクトさせられるようにできました。

header関数の直下にexit;をつけると思わぬエラーを防ぐことができる

このheader関数のリダイレクトはすぐには実行されず、その下のページの読み込みを終えてから行われます。リダイレクトする場合、今いるページの処理は必要ないことが大半のため、exit;をつけることで処理をその時点で終了させます。

先程の例の場合、exit;をつけないことで、処理の続きが実行されてしまうことになります。

もしもこのような処理を行うページでexit;をつけ忘れてしまった場合、ユーザーのデータを消してしまうことになります。

処理をその時点で終了させることで、ウェブページの高速化につながり、不必要な処理をさせないことでバグを発生させにくくさせる効果もあるため、基本的にはつけておくほうが良いでしょう。

phpのheader関数のよくあるエラー

header関数を使用することで非常にかんたんにリダイレクトを実装することができますが、header関数は気をつけなければならないことがいくつかあります。間違えて使用するとエラーとなってしまい、リダイレクトできなくなるので注意が必要です。

<html>の中に書いている

このheader関数は、実行される前に出力があるとエラーとなり動いてくれません。今回の場合、すでに<html>や<head>などが出力されてしまっているため、エラーが発生してしまいリダイレクトできません。

リダイレクトさせるときには必ず実行の前にhtmlの中で処理を実行していないかチェックしましょう。

header関数の前にechoやprintなどの出力を行っている

こちらはechoやprintなどで出力が行われています。実行の前に出力があるとリダイレクトできなくなってしまいますので、エラーが起きてしまった際には、header関数の前にechoやprintでの出力がないか確認してみましょう。

「<?php」の前に改行がある

この余分な改行も出力となり、エラーの原因となります。header関数でエラーが発生したときには、1行目に改行が入っていないか確認してみましょう。

Locationとコロン(:)の間にスペースを入れている

これもよくあるエラーの原因ですが、Locationとコロンの間に半角スペースが入っているとエラーとなり、動いてくれません。

確認するときは少し見づらいですが、必ずLocationとコロンはくっつけるようにましょう。

「<?php 」のように不要な半角スペースが入っている

半角スペースが入ってしまうとエラーとなりリダイレクトできなくなります。とても確認しづらいですが、header関数を使う際には余分なスペースがないか必ず確認するようにしましょう。

BOM付きで保存されている

一部のテキストエディタでは、utf8で保存する際にBOM付で保存されている場合があります。

BOMというのはUnicodeの符号化形式で符号化したテキストの先頭につけるデータのことですが、たまにこのデータが付いている場合があります。上記のエラーの原因以外だった場合、このBOM付きで保存されてしまっているためにエラーが発生してしまう場合があります。

まとめ

いかがでしたか?今回は、

phpのheader関数を使ってリダイレクトする方法

を紹介しました。このリダイレクトというのは、Web開発を行う際に欠かせません。ぜひこの記事でマスターしていってくださいね。

 

参考:https://www.php.net/manual/ja/function.header.php

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?