時刻・環境変数の所得
戻る


[5]時刻・環境変数の所得

【環境変数:日時関連の関数】

PHPの基本の章でも記載しましたが、サーバの情報やクライアントの情報を得るには「 定義済み変数 」を使い、日時情報を得るには「 日付・時刻関数 」を 使います。

定義済み変数とはPHPモジュールが実行される時にあらかじめ所得され、格納された変数の事です。
では、最初に定義済み変数を見てみる事にしましょう。
「サーバのPHP対応状況を確認する」で提供しているinfo.phpと同じものですが、 以下のコードを作り、サーバにアップロードしてアクセスしてみてください。

このプログラムはソースをコピーしたりせずに、ご自分でタイプしてみてください。
また、ここ以降はそれぞれの関数についての個別解説はしませんので、 出てくる関数についての詳細はマニュアルを参考にしてください。
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
//定義済み変数を見てみる
///////////////////////////////////////////

phpinfo();
?>

コードはこれだけです。
「サーバのPHP対応状況を確認する」で表示したようなphp情報が表示された筈です。

では、下の方にスクロールして「PHP Variables」の項を見てください。

PHP Variables
VariableValue
_SERVER["UNIQUE_ID"]xVzxx30AdAlAAxxJxUEAxxADx
※このサーバの個別ID
_SERVER["HTTP_ACCEPT"]image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
_SERVER["HTTP_REFERER"]http://***.com/
※どこからこのプログラムへアクセスしたのか
_SERVER["HTTP_ACCEPT_LANGUAGE"]ja
※このサーバの言語
_SERVER["HTTP_ACCEPT_ENCODING"]gzip, deflate
_SERVER["HTTP_USER_AGENT"]Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
※クライアントのユーザエージェント(ブラウザ)
_SERVER["HTTP_HOST"]192.168.1.99
※サーバに振り分けられているIPアドレス
_SERVER["HTTP_CONNECTION"]Keep-Alive
_SERVER["PATH"]/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
_SERVER["SERVER_SIGNATURE"]<address>Apache/2.0.52 (Fedora) Server at *******.jp Port 80</address>
※このサーバのアプリケーション名ならびに提供ポート
_SERVER["SERVER_SOFTWARE"]Apache/2.0.52 (Fedora)
※このサーバのアプリケーション名
_SERVER["SERVER_NAME"]*******.jp
※このサーバのドメイン
_SERVER["SERVER_ADDR"]192.168.1.99
※このサーバのIPアドレス
_SERVER["SERVER_PORT"]80
※HTTPが提供されているポート番号
_SERVER["REMOTE_ADDR"]192.168.1.11
※接続しているクライアントのリモート
_SERVER["DOCUMENT_ROOT"]/home/*******/public_html/
※サーバで設定されているルートディレクトリ
_SERVER["SERVER_ADMIN"]root@*******.jp
※サーバ管理者のメールアドレス
_SERVER["SCRIPT_FILENAME"]/home/******/public_html/info.php
※スクリプトへの絶対パス
_SERVER["REMOTE_PORT"]0123
_SERVER["GATEWAY_INTERFACE"]CGI/1.1
_SERVER["SERVER_PROTOCOL"]HTTP/1.1
_SERVER["REQUEST_METHOD"]GET
_SERVER["QUERY_STRING"]no value
_SERVER["REQUEST_URI"]/~******/info.php
_SERVER["SCRIPT_NAME"]/~******/info.php
※このスクリプトへのURL
_SERVER["PHP_SELF"]/~******/info.php
_SERVER["PATH_TRANSLATED"]/home/*******/public_html/info.php
_SERVER["argv"]
Array
(
)
_SERVER["argc"]0
_ENV["LANG"]C
_ENV["SELINUX_INIT"]YES
_ENV["CONSOLE"]/dev/pts/0
_ENV["TERM"]linux
_ENV["INIT_VERSION"]sysvinit-2.85
_ENV["PATH"]/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
_ENV["RUNLEVEL"]5
_ENV["runlevel"]5
_ENV["PWD"]/
_ENV["PREVLEVEL"]N
_ENV["previous"]N
_ENV["HOME"]/
_ENV["SHLVL"]2
_ENV["_"]/sbin/initlog

これらが、定義済み変数$_SERVERと$_ENVです。これらを読み出すには先頭に「$」を 付けて$_SERVER["SCRIPT_NAME"]のように読み出します。 簡単な説明はそれぞれ個別に書いてありますので参考にしてください。

・$_SERVER["HTTP_REFERER"]
↑はどこから来たのか直前のサイトURLが格納されています。
・$_SERVER["HTTP_HOST"]
↑はサーバのドメイン名が格納されています。
・$_SERVER["REMOTE_ADDR"]
↑は接続しているクライアントのリモートIPが格納されています。
・$_SERVER["SCRIPT_NAME"]
↑は実行中のスクリプトのURLパスが格納されています。

おおよそ使用する$_SERVER変数は上の4つだと思います。
では実際に読み出してみましょう。
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
//定義済み変数を見てみる
///////////////////////////////////////////

print $_SERVER["HTTP_HOST"]."<br>";
print $_SERVER["REMOTE_ADDR"]."<br>";
print $_SERVER["SCRIPT_NAME"];
?>

info.phpのものと同じものが表示された筈です。

これらの情報は接続してきたクライアントのIP情報を得るアクセス解析などや、 フォームによるデータの受渡し時、リファイラによるアクセス制限などを行う時などに 使います。
この他に定義済み変数には$_POST、$_GETなどのフォームデータの受渡し変数や、$_COOKIE、$HTTP_COOKIE_VARS などのクッキー受渡し変数、$_SESSIONセッションの受渡し変数がありますが、これらはそれぞれの 解説ページで解説します。

次に日時関連の関数について解説します。
メモ帳などを開いて以下のコードを作成し、適当な名前でサーバにアップロードしてください。

<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
//日時関連の関数
///////////////////////////////////////////

//サーバに設定されている時刻を見る(UNIXタイムスタンプ)
print time ()."<br>";

//サーバに設定されている時刻を見る(整形済み時刻)
print date ("Y年m月d日H時i分s秒")."<br>";
?>

最初のtime()では数字の羅列が表示され、次のdate()ではちゃんとわかり易く整形されて表示された筈です。
time()では1970年1月1日0時0分0秒からの秒数が表示されています。
通常UNIX系サーバではこのUNIXタイムスタンプを使用しますので、データの受渡しや加工にはtime関数で得た 値を使用します。date関数はこのtime関数から得た値を整形している関数です。
試しにファイルの更新日時を得る関数filemtime()を使ってファイルの更新日時を得てみましょう。

<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
//日時関連の関数
///////////////////////////////////////////

//更新日時を調べるファイル名を指定
$file_name=explode("/",$_SERVER['SCRIPT_NAME']);

//自分のファイルネームのみ得る為のカウント
$i=count($file_name);

//更新日時を調べる
$flile_now=filemtime($file_name[$i-1]);

//更新日時を表示
print $flile_now."<br>";

?>

filemtime()はUNIXタイムスタンプで値を返しますので数字の羅列が表示されます。
これではよく解らないのでdate関数で整形してみましょう。

<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
//日時関連の関数
///////////////////////////////////////////

//更新日時を調べるファイル名を指定
$file_name=explode("/",$_SERVER['SCRIPT_NAME']);

//自分のファイルネームのみ得る為のカウント
$i=count($file_name);

//更新日時を調べる
$flile_now=filemtime($file_name[$i-1]);

//更新日時を表示
print date("Y年m月d日H時i分s秒",$flile_now)."<br>";

?>

今度はちゃんとわかり易く表示されましたね。
日時関連の関数はこのように使用します。簡単でしたね。これで終わりです。



TOPへ