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:ヘッダーの内容。
ただし、該当するヘッダーがある場合のみ定義される。

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

0116: /**
0117:  * HTTP変数一覧を作る
0118:  * @return string 変数一覧(HTML)
0119: */
0120: function makeCommonBody() {
0121:     //HTTP変数
0122:     $httpvars = array(
0123:         'REMOTE_ADDR'         => 'IPアドレス',
0124:         'REMOTE_HOST'         => 'ホスト名',
0125:         'REMOTE_PORT'         => 'ポート番号',
0126:         'HTTP_USER_AGENT'     => 'ユーザーエージェント',
0127:         'HTTP_REFERER'         => '参照ページアドレス',
0128:         'HTTP_ACCEPT_LANGUAGE' => '言語',
0129:         'HTTP_CONNECTION'     => 'コネクションヘッダ'
0130:     );
0131:     //REMOTE_HOSTがなければgethostbyaddrで取得
0132:     if (!isset($_SERVER['REMOTE_HOST']) || $_SERVER['REMOTE_HOST'] == '') {
0133:         $_SERVER['REMOTE_HOST'] = gethostbyaddr($_SERVER['REMOTE_ADDR']);
0134:     }
0135: 
0136:     //表示用HTML作成
0137:     $caption = TITLE;
0138:     $refere = REFERENCE;
0139:     $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
0140:     $width  = WIDTH;
0141:     $debug  = '';
0142: 
0143:     //デバッグ情報
0144:     if (! FLAG_RELEASE) {
0145:         $phpver = phpversion();
0146: $debug =<<< EOT
0147: <p>
0148: <span style="font-weight:bold;">★デバックモードで動作中...</span><br />
0149: PHPver : {$phpver}
0150: 
0151: EOT;
0152:     }
0153: 
0154: $html =<<< EOT
0155: <table class="plists">
0156: <caption>{$caption} {$version}</caption>
0157: <tr>
0158: <th>変数</th>
0159: <th>値</th>
0160: <th>説明</th>
0161: </tr>
0162: 
0163: EOT;
0164:     foreach ($httpvars as $key=>$discript) {
0165:         if (isset($_SERVER[$key])) {
0166: $html .=<<< EOT
0167: <tr>
0168: <td>{$key}</td>
0169: <td>{$_SERVER[$key]}</td>
0170: <td>{$discript}</td>
0171: </tr>
0172: 
0173: EOT;
0174:         }
0175:     }
0176: $html .=<<< EOT
0177: </table>
0178: 
0179: <div style="border-style:solid; border-width:1px; margin:20px 0px 0px 0px; padding:5px; width:{$width}px; font-size:small; overflow-wrap:break-word; word-break:break-all;">
0180: ※参考サイト:<a href="{$refere}">{$refere}</a>
0181: {$debug}
0182: </div>
0183: 
0184: EOT;
0185:     return $html;
0186: }

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

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

参考サイト

(この項おわり)
header