PHPでユーザー・アクセス情報を表示する

(1/1)
HTTP通信においては、ブラウザ(クライアント)がホストに対して様々な情報を送信していることはご存じだろうか。
個人を特定できるような情報が送られるというのは都市伝説で、実際には、アクセスしているクライアントの IP アドレスやブラウザの種類が送信されるだけである。それでも、アクセス解析のための情報として重宝する。
そこで今回は、PHP を使って、ブラウザがどのような情報を送っているのか表示するプログラムをつくる。

HTTP変数

まずは、ブラウザ(クライアント)が HTTP サーバに送信する HTTP 変数を整理しておこう。
HTTP変数内容
REMOTE ADDRESS現在のページを見ているユーザーのIPアドレス。
REMOTE HOST現在のページを見ているユーザーのホスト名。
ISP特有のホスト名が付いていることが多く、ユーザーがどの地域からアクセスしているのか、だいたいの目安になる。
REMOTE PORTユーザーが利用しているポート番号。
HTTP USER AGENT現在のリクエストにおいてUser_Agent:ヘッダーが定義されている場合にはその内容。
これは、現在のページを見るために使用されているブラウザの種類を示す文字列である。
HTTP REFERERブラウザから現在のページを参照する際のページアドレス。
この変数は、ユーザーのブラウザにより設定される。全てのブラウザが この変数を設定するわけではない。
HTTP ACCEPT LANGUAGE現在のリクエストにおけるAccept-Language:ヘッダーの内容。
ただし、該当するヘッダーがある場合のみ定義される。
HTTP CONNECTION現在のリクエストにおけるConnection:ヘッダーの内容。
ただし、該当するヘッダーがある場合のみ定義される。

サンプル・プログラム

サンプル・プログラムの解説

0061: /**
0062:  * HTTP変数一覧を作る
0063:  * @return string 変数一覧(HTML)
0064: */
0065: function makeCommonBody() {
0066:     //HTTP変数
0067:     $httpvars = array(
0068:         'REMOTE_ADDR'         => 'IPアドレス',
0069:         'REMOTE_HOST'         => 'ホスト名',
0070:         'REMOTE_PORT'         => 'ポート番号',
0071:         'HTTP_USER_AGENT'     => 'ユーザーエージェント',
0072:         'HTTP_REFERER'         => '参照ページアドレス',
0073:         'HTTP_ACCEPT_LANGUAGE' => '言語',
0074:         'HTTP_CONNECTION'     => 'コネクションヘッダ'
0075:     );
0076:     //REMOTE_HOSTがなければgethostbyaddrで取得
0077:     if (!isset($_SERVER['REMOTE_HOST']) || $_SERVER['REMOTE_HOST'] == '') {
0078:         $_SERVER['REMOTE_HOST'] = gethostbyaddr($_SERVER['REMOTE_ADDR']);
0079:     }
0080:     //表示用HTML作成
0081:     $caption = TITLE;
0082: $html =<<< EOT
0083: <table>
0084: <caption>{$caption}</caption>
0085: <tr>
0086: <th>変数</th>
0087: <th>値</th>
0088: <th>説明</th>
0089: </tr>
0090: 
0091: EOT;
0092:     foreach ($httpvars as $key=>$discript) {
0093: $html .=<<< EOT
0094: <tr>
0095: <td>{$key}</td>
0096: <td>{$_SERVER[$key]}</td>
0097: <td>{$discript}</td>
0098: </tr>
0099: 
0100: EOT;
0101:     }
0102: $html .=<<< EOT
0103: </table>
0104: 
0105: EOT;
0106:     return $html;
0107: }

グローバル配列 $_SERVER に HTTP 変数の値が格納されている。

$_SERVER['REMOTE HOST'] の値がない場合は、組み込み関数  gethostbyaddr  を利用し、DNS に問い合わせて IP アドレスをホスト名に変換するようにしてある。

参考サイト

(この項おわり)
header