PHPで「戻る」リンク
Home >> サンプルスクリプト >> Tips >> PHPで「戻る」リンク

PHPで「戻る」リンク

リファラ情報の取得
  • $_SERVER['HTTP_REFERER']

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

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

<?php
$ref
= $_SERVER['HTTP_REFERER']; // リファラ値を変数に格納
$text = "戻る";

if(isset(
$ref)){ // リファラ値があれば<a>タグ内へ
  
echo '<a href="'.$ref.'">'.$text."</a>";
}
else{
// なければ<a>タグを挿入しない
  
echo $text;
}
?>

出力結果

戻る

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

"<a href=\"{$ref}\">".$text."</a>";

issetという記述が出てきましたが、これは変数がセットされているかどうか調べる関数で、変数に値があればTRUE/値がなければFALSEを返します。

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

書式

  • bool isset( mixed var )

参考関数

  • isset() ---- 変数がセットされているどうか調べる
この他にもサーバ変数を使用してできる事はたくさんあります。ブラウザ情報の表示もサーバ変数ですし、IPアドレスなんかの情報を取得するのもサーバ変数です。

参考サーバ変数