U-style PHP独学日記  Since2001 メインメニューに戻る PHPメニューに戻る
タイトル環境変数を使う
文書管理番号 作成日 分類1 分類2 キーワード

PHP0022

2004-01-29
2005-09-19
  環境変数

2005-09-19修正:
以前記述したものは仕様変更があったらしく利用はできるもののお進めではないみたいです。最近では
$_SERVERや$_ENVといった変数を利用します。格納されている値は配列になっていてちょうどうれしいことに配列を表示する関数(print_r)がありますのでそれをテストしたいと思います。スクリプトは

<?
print_r($_SERVER);
echo"<br><br><br>";
print_r($_ENV);
echo "<br><br><br>";

//個別に指定する時は配列になっているので下記のように指定する
echo $_SERVER["REMOTE_ADDR"];

?>

です。
テスト結果を表示しようと思ったのですがレンタルサーバーでこの値を表示するのはどうかと思いまして自宅のサーバーを使って行った結果の値を表示します。
Array ( [UNIQUE_ID] => STf9dH8AAAEAAAvMysEAAAAA [HTTP_ACCEPT] => */* [HTTP_REFERER] => http://192.168.1.14/test/ [HTTP_ACCEPT_LANGUAGE] => ja [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) [HTTP_HOST] => 192.168.1.14 [HTTP_CONNECTION] => Keep-Alive [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin [SERVER_SIGNATURE] =>
Apache/2.0.53 (Fedora) Server at serblue Port 80
[SERVER_SOFTWARE] => Apache/2.0.53 (Fedora) [SERVER_NAME] => serblue [SERVER_ADDR] => 192.168.1.14 [SERVER_PORT] => 80 [REMOTE_ADDR] => 192.168.1.20 [DOCUMENT_ROOT] => /var/www/html [SERVER_ADMIN] => root@localhost [SCRIPT_FILENAME] => /var/www/html/test/sr_php0002.php [REMOTE_PORT] => 2991 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /test/sr_php0002.php [SCRIPT_NAME] => /test/sr_php0002.php [PHP_SELF] => /test/sr_php0002.php [PATH_TRANSLATED] => /var/www/html/test/sr_php0002.php [argv] => Array ( ) [argc] => 0 )


Array ( [LANG] => C [SELINUX_INIT] => YES [CONSOLE] => /dev/pts/0 [TERM] => linux [INIT_VERSION] => sysvinit-2.85 [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin [RUNLEVEL] => 5 [runlevel] => 5 [PWD] => / [PREVLEVEL] => N [previous] => N [HOME] => / [SHLVL] => 2 [_] => /sbin/initlog )


192.168.1.20

実際に利用する際はスクリプトの注釈で書いたとおり配列として収まっているので[" "]でくくり利用します。
その他おもしろそうなものは$GLOBALS(アンダーバーがないことに注意!)です。長いのでここでは省略しますが試してみてください。

―――修正終わり―――

ホームページを見ていると自分のブラウザやIPアドレスを表示してくれるサイトがありますが、今回の学習はまさにそれです。PHPも環境に関する情報を拾ってくれるのでそれを表示することをしてみます。

面白そうな関数
解説はおそらくそうじゃないかです。間違いがありましたらご指摘ください。

HTTP_CLIENT_IP 実IPアドレス
HTTP_ACCEPT_LANGUAGE 利用言語
HTTP_REFERER: どのサイトからきたか
HTTP_USER_AGENT 訪問者の利用環境(ブラウザのバージョン等)
REMOTE_ADDR プロキシを経由しているときはプロキシサーバーのアドレスが表示される
REMOTE_HOST 訪問者のパソコン名(プロキシを経由している場合はプロキシサーバーの名前が表示される)
REMOTE_PORT 訪問者のポート番号(プロキシを経由している場合はプロキシサーバーの名前が表示される)

では早速テストプログラムをつくってみます。

<?
header("Content-type: text/html; charset=euc-jp");
?>
<html>
<body>
<?
print("HTTP_CLIENT_IP=" . $HTTP_CLIENT_IP . "<br>");
print("HTTP_ACCEPT_LANGUAGE=" . $HTTP_ACCEPT_LANGUAGE . "<br>");
print("HTTP_REFERER" . $HTTP_REFERER . "<br>");
print("HTTP_USER_AGENT" . $HTTP_USER_AGENT . "<br>");
print("REMOTE_ADDR=" . $REMOTE_ADDR . "<br>") ;
print("REMOTE_HOST" . $REMOTE_HOST . "<br>");
print("REMOTE_PORT" . $REMOTE_PORT . "<br>");
?>
</body>
</html>

実行結果

自宅サーバーではほとんどの環境変数が出力されませんでした。しかしエクスリア様で上記を動かすと表示されます。ローカル環境では表示されないのかもしれません。プロキシを設定していても結果は同様です。

 

本日の参考文献

  •  MySQL&PHPでつくるWebデータベース Spencer K Ogawa著 エーアイ出版
  •  http://www.php.net/manual/ja/control-structures.foreach.php