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

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

(2021年7月4日)XSS対策,スタイルシート変更

目次

サンプル・プログラムの実行例

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

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

 130: /**
 131:  * HTTP変数一覧を作る
 132:  * @return  string 変数一覧(HTML)
 133: */
 134: function makeCommonBody() {
 135:     //HTTP変数
 136:     $httpvars = array(
 137:         'REMOTE_ADDR'           => 'IPアドレス',
 138:         'REMOTE_HOST'           => 'ホスト名',
 139:         'REMOTE_PORT'           => 'ポート番号',
 140:         'HTTP_USER_AGENT'       => 'ユーザーエージェント',
 141:         'HTTP_REFERER'          => '参照ページアドレス',
 142:         'HTTP_ACCEPT_LANGUAGE'  => '言語',
 143:         'HTTP_CONNECTION'       => 'コネクションヘッダ'
 144:     );
 145:     //REMOTE_HOSTがなければgethostbyaddrで取得
 146:     if (!isset($_SERVER['REMOTE_HOST']) || $_SERVER['REMOTE_HOST'] == '') {
 147:         $_SERVER['REMOTE_HOST'] = gethostbyaddr($_SERVER['REMOTE_ADDR']);
 148:     }
 149: 
 150:     //表示用HTML作成
 151:     $caption = TITLE;
 152:     $refere = REFERENCE;
 153:     $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
 154:     $width  = WIDTH;
 155:     $debug  = '';
 156: 
 157:     //デバッグ情報
 158:     if (! FLAG_RELEASE) {
 159:         $phpver = phpversion();
 160:         $debug =<<< EOT
 161: <p>
 162: <span style="font-weight:bold;">★デバックモードで動作中...</span><br />
 163: PHPver : {$phpver}
 164: 
 165: EOT;
 166:     }
 167: 
 168:     $html =<<< EOT
 169: <table class="plists">
 170: <caption>{$caption} {$version}</caption>
 171: <tr>
 172: <th>変数</th>
 173: <th>値</th>
 174: <th>説明</th>
 175: </tr>
 176: 
 177: EOT;
 178:     foreach ($httpvars as $key=>$discript) {
 179:         if (isset($_SERVER[$key])) {
 180:             $ss = htmlentities($_SERVER[$key]);     //XSS対策
 181:             $html .=<<< EOT
 182: <tr>
 183: <td class="index">{$key}</td>
 184: <td class="value">{$ss}</td>
 185: <td class="description">{$discript}</td>
 186: </tr>
 187: 
 188: EOT;
 189:         }
 190:     }
 191:     $html .=<<< EOT
 192: </table>
 193: 
 194: <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;">
 195: ※参考サイト:<a href="{$refere}">{$refere}</a>
 196: {$debug}
 197: </div>
 198: 
 199: EOT;
 200:     return $html;
 201: }

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

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

参考サイト

(この項おわり)
header