主なサーバ変数
そふぃのPHP入門 >> PHP実践リファレンス >> サーバ変数:$_SERVER >> 主なサーバ変数

主なサーバ変数

主なサーバ変数

ここではよく使うサーバ変数を紹介していきます。紹介するサーバ変数が使えるかどうかはサーバに依存しますのでご自身で確かめてから使って下さいね。確かめ方は前のページ「サーバ変数について」で解説してます。

register_globalsがONの場合は$_SERVER['PHP_SELF']などの記述を$PHP_SELFなどのように読み替えて頂いても動作します。

PHP_SELF

現在実行しているスクリプトのファイル名です。ドキュメントルートから取得されます。

  1. $_SERVER["PHP_SELF"];

として使いますが、例えば・・・

http://www.test.com/index.phpなら

/index.php

http://www.test.com/somedir/somefile.phpなら

/somedir/somefile.php

が返されます。

似たようなものに__FILE__定数があります。__FILE__はPHPで予め定義されている定数ですが、こちらはPC上のファイルのパスとファイル名(サーバマシン上での絶対パス)を返します。

参考 PHPの定義済み定数1

  1. <?php
  2. print $_SERVER["PHP_SELF"]."<br />\n";
  3. print __FILE__; // アンダーバー「_」は2つずつあります。
  4. ?>

上記のスクリプトで2つの出力を比べてみると分かります。

$_SERVER['PHP_SELF']は非常によく使いますが、その中でも代表的(と思われる)ものを1つ紹介しておきます。

<form action="<?= $_SERVER["PHP_SELF"]; ?>">
</form>

このようにする事で「現在のファイル」へフォームの実行命令を出す事ができます。

<form>タグには本当はmethod属性も入れないといけないのですが、省略したのでご了承下さい。

SERVER_NAME

SERVER_NAMEはサーバのホスト名を取得する事ができます。

  1. <?php
  2. echo $_SERVER["SERVER_NAME"];
  3. ?>

出力結果

php-beginner.com

サイトのURLと見比べてみてください。どの部分が取得されてるか分かります。

HTTP_USER_AGENT

ユーザが利用しているブラウザ情報です。大抵のブラウザはHTTP_USER_AGENT情報をサーバに送りますが、送らないブラウザもあります。つまり、この値はサーバだけでなく、ブラウザにも依存するという事です。

  1. <?php
  2. echo $_SERVER["HTTP_USER_AGENT"];
  3. ?>

出力結果

CCBot/2.0 (http://commoncrawl.org/faq/)

現在どのブラウザでページを見ているかが表示されます。

HTTP_REFERER

どのページのリンクをたどって来たかを取得できます。一つ前にどのページを見ていたか取得できるので、アクセス解析などでリンク元サイトなどを把握するのにもよく使われます。ただし、これもブラウザが送る情報をサーバが取得していますので、この値が取得できるかどうかはサーバだけでなく、ブラウザにも依存します。

また、リンクをたどって来たわけでなく、ブックマーク(お気に入り)から来た場合やURLを直接入力して来た場合にはHTTP_REFERERの値はありません。

  1. <?php
  2. if( empty($_SERVER["HTTP_REFERER"]) ){ // HTTP_REFERERの値がなければ以下の文を出力
  3.   echo "リファラ値がありません。";
  4. } else{ // HTTP_REFERERの値があればそれを出力
  5.   echo $_SERVER["HTTP_REFERER"];
  6. };
  7. ?>

出力結果

リファラ値がありません。

上記のスクリプトを工夫して、<a>タグ内にHTTP_REFERERの値を入れると、「戻る」ボタンなどができます。

サンプル PHPで「戻る」リンク

REMOTE_ADDR

REMOTE_ADDRはユーザのIPアドレスを取得する事ができます。

  1. <?php
  2. echo $_SERVER["REMOTE_ADDR"];
  3. ?>

IPアドレスではなく、ホスト名を取得したい場合はgethostbyaddr()関数を使用するか、$_SERVER['REMOTE_HOST']を使います。

REMOTE_HOST

REMOTE_ADDRで少し触れましたが、$_SERVER['REMOTE_HOST']でホスト名を取得する事ができます。サーバがREMOTE_HOSTを取得できるように設定してあれば、ホスト名の取得には以下の文が楽です。

  1. <?php
  2. echo $_SERVER["REMOTE_HOST"];
  3. ?>

但し、この値は取得できないように設定しているサーバも多いです。その場合は以下のようにしてgethostbyaddr()関数を使用します。

  1. <?php
  2. echo gethostbyaddr($_SERVER["REMOTE_ADDR"]);
  3. ?>

gethostbyaddr()関数はIPアドレスからホスト名を取得してくれる便利な関数です。使い方は非常に簡単で、引数にIPアドレスを指定するだけです。この場合は引数としてサーバ変数をそのまま指定しますが、IPアドレスを取得するREMOTE_ADDRを指定しています。

参考関数

  • gethostbyaddr() ---- IPアドレスに対応するホスト名を取得する

書式

  • string gethostbyaddr( string ip_address )

まだまだ便利なサーバ変数はたくさんありますが、だいぶ長くなってきたのでこの辺にしておきます。残りはサーバ変数一覧で紹介します。