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()---- 変数がセットされているどうか調べる


