PHPで「戻る」リンク
そふぃのPHP入門 >> サンプルスクリプト >> Tips >> PHPで「戻る」リンク

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>タグ無しでそのまま出力します。

リファラを取得して戻るリンクに挿入

  1. <?php
  2. $text = "戻る";
  3. // リファラ値がなければ<a>タグを挿入しない
  4. if (empty($_SERVER['HTTP_REFERER'])) {  
  5.   echo $text;
  6. }
  7. // リファラ値があれば<a>タグ内へ
  8. else {
  9.   echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">' . $text . "</a>";
  10. }
  11. ?>

出力結果

戻る

<a>タグ内のクォーテーションの括り方がややこしいですが、面倒だったらいっそのこと変数は波括弧{}で括ってしまって下さい。私は変数は文字列の外に出す方が好きなので、どうしてもややこしい括り方をしてしまいますが、波括弧{}構文でも何の問題もないのでお好きな方でいいです。但し、その場合の括りはダブルクォーテーションでないと変数展開されませんので、HTMLタグの属性にもダブルクォーテーションを使っている方はエスケープをお忘れなく。

  1. "<a href=\"{$_SERVER['HTTP_REFERER']}\">".$text."</a>";

emptyという記述が出てきましたが、これは変数が空かどうか調べる関数で、変数が空ならTRUEを、変数に値があればFALSEを返します。

このempty()関数を利用してリファラ値の有無を調べています。

参考関数

  • empty() ---- 変数が空かどうか調べる

書式

  • bool empty( mixed var )

この他にもサーバ変数を使用してできる事はたくさんあります。ブラウザ情報の表示もサーバ変数ですし、IPアドレスなんかの情報を取得するのもサーバ変数です。

参考 サーバ変数