環境変数という言葉を耳にしたことはあっても、実際に変数の値を参照したり、使ったりしたことは少ないと思います。
環境変数はおもにPHPが稼働するサーバのOSが管理するものですが、PHPスクリプトでも定義して利用できます。普段は目にしないからといって全く使われないものではありません。PHPから他のプログラムを起動する場合のデータの受け渡しなどで活用されています。
ここでは、環境変数の値を参照するための関数getenvを中心に環境変数の取扱いについて説明します。
PHPでの環境変数の扱いを習得するための参考に、ぜひ読んでみてください。
目次
環境変数とは
環境変数は、コンピュータやOSに関する設定データを、利用者やプログラムで共通的に参照できるようにするためのもので、PHPに固有の枠組みではありません。ここでは、まず、環境変数の概要を説明します。
環境変数の定義
環境変数(environment variable)とは、コンピューターの基本動作やOS(オペレーティングシステム)の実行環境に関する設定データを格納した変数のことです。アプリケーションプログラムでも、基本的な実行環境に関する設定情報を格納するために定義している場合があります。
良く知られている環境変数として以下のようなものがあります。
UNIX系OSの場合
変数名 | 説明 |
TZ | 国や地域ごとの標準時刻や時間帯(日本の時刻はJST) |
PATH | 標準コマンドなどの置かれているパス(path) |
USER | 現在の利用者のアカウント名 |
HOME | 現在の利用者のホームディレクトリのパス |
LANG | 利用者の使う言語(日本語、英語など)を設定 |
PWD | カレントディレクトリを表す |
SHELL | デフォルトのシェルのパスを指定 |
Windowsの場合
変数名 | 説明 |
PATH | 標準コマンドなどの置かれているパス(path) |
SystemDrive | システムドライブ |
WINDIR | Windowsフォルダ |
PATHEXT | 実行可能なファイルの拡張子を列挙 |
TEMP | 一時フォルダのパス |
PROMPT | コマンドプロンプトの形式を設定 |
COMPUTERNAME | 設定されたコンピュータ名 |
PHPにおける環境変数の役割
PHPでは、環境変数は、以下のような用途で使用されます。
- ・OSで設定された情報を参照することがあります。場合、PATHなどがよく参照される。
- ・他のプログラムを起動する場合に少量のデータの受け渡しに利用する。
- ・データベースのアクセスキーやAPIのキーなどのような開示制限が必要な情報の保存
- ・環境設定の切り替え用フラグなど、環境ごとに変更が必要な情報の保存
2.環境変数をPHPで扱う方法
PHPで環境変数を参照する方法は、getenvを使う以外にも、いくつかの方法があります。ここでは、まず、これらの方法の概要を説明します。
Phpinfo()
phpinfo関数は、PHPの設定情報を表示してくれる関数です。PHP実行時の設定や利用できる定義済みの変数を調べるためなどによく使われます。
環境変数はEnvironmentというセクションにまとめて表示されます。
phpinfo関数の出力情報は、
- ・PHPのバージョン
- ・コンパイルオプションと拡張機能
- ・サーバ情報、PHP の環境、OS バージョン情報
- ・パス
- ・構成オプションのマスター およびローカルの値
- ・HTTP ヘッダ、PHP License
など多岐にわたっています。
環境変数のほか、GET, POST, Cookie, Serverなどの情報が含まれているため、デバッグツールとしても便利です。
$_ENV
$_ENVは、現在のPHPスクリプトに渡された環境変数の値を格納した連想配列です。
PHPスクリプト内のどこからでも参照できるスーパーグローバル変数として定義されています。
なお、PHPの設定情報(php.iniファイル)で$_ENVを有効にしていない場合は、$_ENVを参照しても値は表示されません。
環境変数名が連想配列のキーになります。
記述例
1 2 3 |
<?php echo 'My username is ' .$_ENV["USERNAME"] . '!'; ?> |
結果
1 |
My username is y***t! |
$_SERVER
$_SERVER は、サーバー情報および実行時の環境情報を格納した連想配列です。
ヘッダ、パス、スクリプトの位置のような情報を参照することができます。
スーパーグローバル変数として定義されています。
環境変数名が連想配列のキーになります。
記述例
1 2 3 |
<?php echo 'My username is ' .$_SERVER["USERNAME"] . '!'; ?> |
結果
1 |
My username is y***t! |
getenv関数の使い方
getenv関数の仕様
getenv ( string $varname , bool $local_only = false ) : string
getenv ( ) : array
【パラメータ】
varname : 変数の名前
local_only : true に設定すると、(OS または putenv により設定された) ローカルの環境変数のみを返します。
【リターン値】
varname が示す環境変数の値を返します。
環境変数 varname が存在しない場合はfalseを返します。
varname が省略された場合、 すべての環境変数は連想配列として返されます。
getenv関数の使用例
個別の環境変数の値を参照する場合の記述例を示します。
記述例
1 2 3 |
<?php echo 'My username is ' .getenv("USERNAME") . '!'; ?> |
結果
1 |
My username is y***t! |
環境変数の値をまとめて参照する場合は引数なしでgetenv()を実行します。
記述例
1 2 3 |
<?php print_r(getenv()); ?> |
結果
1 2 3 4 5 6 |
Array ( [ALLUSERSPROFILE] => C:\Pr■■■■■■ ・・・ [windir] => C:\W■■■■■■ ) |
getenv関数に関する留意事項
PHP が Fast CGI のような SAPI で実行中の場合、 同じ名前のローカル環境変数を設定するために putenv() が使用されても、 この関数は 常に、SAPI により設定された環境変数の値を返します。
ローカル設定された環境変数の値を返すには、 local_only パラメーターを使用します。
記述例
1 2 3 4 5 6 7 8 9 |
<?php print "SERVER_NAME \$_SEREVRで取得: ".$_SERVER["SERVER_NAME"]."<br />\n"; print "SERVER_NAME getenvで取得: ".getenv("SERVER_NAME")."<br />\n"; putenv('SERVER_NAME="My_Server"'); print "SERVER_NAME putenvでMy¥Serverに変更: "."<br />\n"; print "SERVER_NAME \$_SEREVRで取得: ".$_SERVER["SERVER_NAME"]."<br />\n"; print "SERVER_NAME getenv(\"SERVER_NAME\")で取得: ".getenv("SERVER_NAME")."<br />\n"; print "SERVER_NAME getenv(\"SERVER_NAME\",true)で取得: ".getenv("SERVER_NAME",true)."<br />\n"; ?> |
結果
1 2 3 4 5 6 |
SERVER_NAME $_SEREVRで取得: localhost SERVER_NAME getenvで取得: localhost SERVER_NAME putenvでMy¥Serverに変更: SERVER_NAME $_SEREVRで取得: localhost SERVER_NAME getenv("SERVER_NAME")で取得: localhost SERVER_NAME getenv("SERVER_NAME",true)で取得: "My_Server" //putenvの結果 |
まとめ
いかがでしたか?今回は、PHPで環境変数の扱いとgetenv関数の使い方について説明しました。
WEB埋め込み型のスクリプト言語であるPHPは、データベースやいろんなプログラムを実行してHTML記述を動的に生成することができます。こうしたプログラム間でのデータの受け渡しに環境変数を利用することでシンプルなプログラムにできる可能性があります。
この記事が、WebプログラミングやPHPの学習などのお役に立てば幸いです。