サーバ変数

HTTP_REFERER

リンクをたどってきた場合,$_SERVER['HTTP_REFERER'] を調べれば,一つ前のページのアドレスがわかります。

あなたはリンクをたどらずにこのページに来ましたね

<p>
<?php
  $x = $_SERVER['HTTP_REFERER'];
  if (isset($x)) {
    $x = htmlspecialchars($x);
    echo "あなたは $x のリンクをたどって来ましたね";
  } else {
    echo "あなたはリンクをたどらずにこのページに来ましたね";
  }
?>
</p>

htmlspecialchars() を使う理由については セキュリティ上の配慮 をご覧ください。

非常に古いブラウザでは,リンクをたどらなくても,直前のページのアドレスがこの方法でわかってしまう場合があります。「REFERER漏れ」で検索してみてください。

HTTP_USER_AGENT

ブラウザの銘柄です。

あなたのブラウザは CCBot/1.0 (+http://www.commoncrawl.org/bot.html)ですね?

<p>あなたのブラウザは
<?php echo htmlspecialchars($_SERVER['HTTP_USER_AGENT']) ?>
ですね?</p>

解説

このようなWebサーバから渡される変数には,ほかに次のものがあります。

応用1

PHP で「戻る」リンクを実現するには次のようにします。

<?php
  if (isset($_SERVER['HTTP_REFERER']))
    echo '<a href="', htmlspecialchars($_SERVER['HTTP_REFERER']), '">[戻る]</a>';
?>

もし直接 URL をアドレス欄に打ち込んでこのページに来たなら,[戻る]は表示されません。

応用2

ブラウザによって表示するページ内容を変えてみましょう。

ブラウザの種類は $_SERVER['HTTP_USER_AGENT'] に入っています。 いくつかのブラウザでどのようなものが入るか調べ,それによって条件判断しましょう。

たとえば

<?php
  if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
     /* Microsoft Internet Explorer の場合 */
  } else {
     /* それ以外 */
  }
?>

あるいは

<?php
  $ua = $_SERVER['HTTP_USER_AGENT'];
  if (strstr($ua, "DoCoMo")) {
     /* DoCoMo携帯の場合 */
  } elseif (strstr($ua, "SoftBank") || strstr($ua, "Vodafone") ||
            strstr($ua, "J-PHONE") || strstr($ua, "MOT-")) {
     /* SoftBank携帯の場合 */
  } elseif (strstr($ua, "KDDI") || strstr($ua, "UP.Browser")) {
     /* au携帯 */
  } elseif (strstr($ua, "WILLCOM") || strstr($ua, "DDIPOCKET")) {
     /* WILLCOM */
  } else {
     /* それ以外 */
  }
?>

のようにします。

strstr() は文字列(string)中の文字列を探す関数です。

応用3

$_SERVER['HTTPS'] というサーバ変数の値が on であれば,SSL(暗号化)プロトコルでそのページを見ていることになります。

<?php
  if (isset($_SERVER['HTTPS'])) {
    echo "このページから送信される情報は暗号化されます。";
  }
?>

応用4

SQLite を併用してブラウザの種類を数える方法は ブラウザの統計 のページに移しました。

参考

すべてのサーバ変数


奥村晴彦

Last modified: 2009-08-04 10:18:37