PHPで「戻る」リンク
$_SERVER変数でリファラ情報を取得
PHPで一つ前のページに戻るリンクを作成するには、一つ前にどのページを見ていたかの情報が必要になります。これは、PHPに元々用意されているサーバ変数というもので取得できます。
但し、JavaScriptのhistory.backなどと違い、ブラウザから情報を読み取るわけではありません。PHPはあくまでサーバサイドスクリプトですので、情報はサーバから読み取ります。
「この一つ前のページに戻る」という機能ですが、ブラウザがサーバに送る「HTTP_REFERER」という値を使用します。リファラ値と呼ばれます。HTTP_REFERERとは「どのページのリンクをたどってきたか」の情報です。リンク情報なので、お気に入りからページに来た場合や、URLを直接打ち込んて来た場合にはこの値はつきません。
また、ブラウザによってはHTTP_REFERERの値をサーバに渡さないものも存在します。この機能はあくまでもブラウザに依存する、という事になりますが、大抵のメジャーなブラウザ(IEなど)はこの値をちゃんとサーバに渡してくれます。
PHPでこの値を取得するためには$_SERVER['HTTP_REFERER']という変数を使います。この変数にはリファラ値がすでに入ってます。(値がある場合のみ)。この変数は特殊な変数で、PHPに元々用意されている変数の一種です。スコープも全てのスコープで利用可能という特殊な扱いをうけます。また、設定やバージョンによってはHTTP_REFERERの取得方法が若干違うと思いますが、ここでは「PHP4.2.0以降のバージョンのデフォルト設定」という基準でサンプルを記述していきます。バージョンによっての違いなどについては以下をご覧下さい。
サンプルスクリプト
「戻る」をリファラ値があれば、<a>タグ内に挿入し、なければ<a>タグ無しでそのまま出力します。
リファラを取得して戻るリンクに挿入
- $text = "戻る";
- // リファラ値がなければ<a>タグを挿入しない
- if (empty($_SERVER['HTTP_REFERER'])) {
- echo $text;
- }
- // リファラ値があれば<a>タグ内へ
- else {
- echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">' . $text . "</a>";
- }
出力結果
<a>タグ内のクォーテーションの括り方がややこしいですが、面倒だったらいっそのこと変数は波括弧{}で括ってしまって下さい。私は変数は文字列の外に出す方が好きなので、どうしてもややこしい括り方をしてしまいますが、波括弧{}構文でも何の問題もないのでお好きな方でいいです。但し、その場合の括りはダブルクォーテーションでないと変数展開されませんので、HTMLタグの属性にもダブルクォーテーションを使っている方はエスケープをお忘れなく。
- "<a href=\"{$_SERVER['HTTP_REFERER']}\">".$text."</a>";
emptyという記述が出てきましたが、これは変数が空かどうか調べる関数で、変数が空ならTRUEを、変数に値があればFALSEを返します。
このempty()関数を利用してリファラ値の有無を調べています。
参考関数
- empty() ---- 変数が空かどうか調べる
書式
- bool empty( mixed var )
この他にもサーバ変数を使用してできる事はたくさんあります。ブラウザ情報の表示もサーバ変数ですし、IPアドレスなんかの情報を取得するのもサーバ変数です。





