変数・定数スーパーグローバル変数
スーパーグローバル変数(定義済みの変数)
unknown
PHP4.1.0以降フォームから送信された値を取得するには、スーパーグローバル変数を使用します。
それより前のバージョンでは、httpd.confでregister_globals = On
にするか、$HTTP_*_VARS
(定義済みのPHP配列)を使用して取得します。
PHP4.1.0以降は、$HTTP_*_VARS
とスーパーグローバル変数の両方とも使用できますが、これらは変数としては別物です。
例えば、スクリプト中で、$HTTP_POST_VARS
と$_POST
を混在させて使用するのは好ましくありません。
どちらか一方に統一して使用するようにしましょう。
$GLOBALS
グローバル変数
unknown
グローバルスコープで定義されている全ての変数を格納した連想配列。
変数の名前は配列のキーになっています。
<?
#$GLOBALS
$a=100; $b=1;
function Calc(){
$GLOBALS["b"]=$GLOBALS["a"]+$GLOBALS["b"];
}
Calc();
echo $b."<br>"; //101
#global
$c=100; $d=1;
function Calc2(){
global $c,$d;
$d=$c+$d;
}
Calc2();
echo $d."<br>"; //101
?>
$_SERVER
サーバー変数
unknown
$HTTP_SERVER_VARS
ヘッダ、パス、スクリプトの位置などの情報を有する配列。
$_SERVERの要素 | 説明 |
---|---|
$_SERVER['PHP_SELF']; | /test/index.php ドキュメントルートから見た、現在実行中のファイル名。$PHP_SELFと同じ。 |
$_SERVER['GATEWAY_INTERFACE']; | CGI/1.1 CGIのバージョン。 |
$_SERVER['SERVER_NAME']; | localhost サーバ名取得 |
$_SERVER['SERVER_SOFTWARE']; | Apache/2.0.54(Win32)PHP/4.4.0 サーバの認識文字列 |
$_SERVER['SERVER_PROTOCOL']; | HTTP/1.1 ページがリクエストされた際のプロトコル名とバージョン |
$_SERVER['REQUEST_METHOD']; | 'GET','HEAD','POST','PUT'など ページにアクセスする際に使用されたリクエストのメソッド名 |
$_SERVER['QUERY_STRING']; | URLの「?」以降の文字列を取得 |
$_SERVER['DOCUMENT_ROOT']; | C:/Program Files/Apache Group/Apache2/htdocs URLの「?」以降の文字列を取得 |
$_SERVER['HTTP_ACCEPT']; | 現在のリクエストのAccept:ヘッダ |
$_SERVER['HTTP_ACCEPT_CHARSET']; | Shift_JIS,utf-8;q=0.7,*;q=0.7 現在のリクエストのAccept-Charset:ヘッダ |
$_SERVER['HTTP_ACCEPT_ENCODING']; | gzip,deflate 現在のリクエストのAccept-Encoding:ヘッダ |
$_SERVER['HTTP_ACCEPT_LANGUAGE']; | ja,en-us;q=0.7,en;q=0.3 現在のリクエストのAccept-Language:ヘッダ |
$_SERVER['HTTP_CONNECTION']; | keep-alive 現在のリクエストのConnection:ヘッダ |
$_SERVER['HTTP_HOST']; | localhost 現在のリクエストにHost:ヘッダ |
$_SERVER['HTTP_REFERER'']; | 現在のページに遷移する前にユーザーが閲覧していたページのURL |
$_SERVER['HTTP_USER_AGENT']; | Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2 現在のリクエストのUser-Agent:ヘッダ |
$_SERVER['HTTPS']; | スクリプトがHTTPSプロトコルを通じて実行されている場合に空でない値が返される |
$_SERVER['REMOTE_ADDR']; | ユーザーのIPアドレス |
$_SERVER['REMOTE_HOST']; | ユーザーがアクセスしているホスト名。 |
$_SERVER['REMOTE_PORT']; | ユーザのパソコンからウェブサーバへの通信に使用されているポート番号。 |
$_SERVER['SCRIPT_FILENAME']; | C:/Program Files/Apache Group/Apache2/htdocs/test/test.php 現在実行中のスクリプトファイルの絶対パス |
$_SERVER['SERVER_ADMIN']; | ウェブサーバの設定ファイルのSERVER_ADMIN(Apacheの場合)ディレクティブにセットされている値。 |
$_SERVER['SERVER_PORT']; | 80 ウェブサーバーの通信ポートとして使用されているポート番号。デフォルトは'80'。SSL通信の場合は、セキュアHTTPポートとして指定されている値になる。 |
$_SERVER['SERVER_SIGNATURE']; | Apache/2.0.54 (Win32) PHP/4.4.0 Server at localhost Port 80 サーバーで生成されたページに追加される、サーバーのバージョン名とバーチャルホスト名の文字列。 |
$_SERVER['PATH_TRANSLATED']; | C:/Program Files/Apache Group/Apache2/htdocs/test/test.php バーチャルからリアルへのマッピングがなされた後の、現在のスクリプトファイルシステム上のパス(ドキュメントルートではない)。 |
$_SERVER['SCRIPT_NAME']; | /test/test.php 現在のスクリプトファイルのパス。スクリプトファイル自身のページを指定するのに使える。 |
$_SERVER['REQUEST_URI']; | /test/test.php ページにアクセスするために指定されたURI。 |
$_SERVER['PHP_AUTH_DIGEST']; | PHPをApacheのモジュールとして実行し、HTTPダイジェスト認証を行っている場合、クライアントから送られた'Authorization'ヘッダの内容(適切な認証処理を行うために利用する)。 |
$_SERVER['PHP_AUTH_USER']; | HTTP認証時のユーザー名(PHPをApacheまたはIIS(PHP5でのISAPI)のモジュールとして実行している場合) |
$_SERVER['AUTH_AUTH_PW']; | HTTP認証時のユーザーのパスワード(PHPをApacheまたはIIS(PHP5でのISAPI)のモジュールとして実行している場合) |
$_SERVER['AUTH_TYPE']; | HTTP認証時の認証形式(PHPをApacheのモジュールとして実行している場合) |
<?
/* 例:現在のURLを取得 */
$thisURL='http://'.htmlspecialchars($HTTP_SERVER_VARS['HTTP_HOST'],ENT_QUOTES).htmlspecialchars($HTTP_SERVER_VARS['REQUEST_URI'],ENT_QUOTES);
echo "現在のURL:".$thisURL;
?>
Basic HTTP 認証
認証されていない場合は、ブラウザ上に、ユーザー名とパスワードを入力するウインドウがポップアップで表示されます。 ユーザーがユーザー名とパスワードを入力すると、 定義済みの変数PHP_AUTH_USER、PHP_AUTH_PW、PHP_AUTH_TYPEにそれぞれユーザー名、パスワード、認証タイプが格納されます。
入力された値は、$_SERVER['PHP_AUTH_USER']
として取得できます(PHP4.2.0以前は、$HTTP_SERVER_VARS['PHP_AUTH_USER']
を使用)。
Basic HTTP 認証は、PHPをApacheのモジュールとして動かしている場合のみ使用できます(CGI版×)。
<?
$realm="Restricted area";
$users=Array("admin"=>"mypass","guest"=>"guest");
if(!isset($HTTP_SERVER_VARS['PHP_AUTH_USER'])){
//PHP_AUTH_USERが空ならダイアログを表示するヘッダーを送信
header("WWW-Authenticate: Basic realm=\"".$realm."\"");
header("HTTP/1.0 401 Unauthorized");
echo "<p>ユーザーの認証が必要です。</p>";
die("ユーザーがキャンセルボタンを押した時に送信されるテキスト\n");
}elseif(isset($HTTP_SERVER_VARS['PHP_AUTH_USER'])){
$flag=false;
foreach($users as $id=>$pw){
if($id==$HTTP_SERVER_VARS['PHP_AUTH_USER']){
if($pw==$HTTP_SERVER_VARS['PHP_AUTH_PW']){
$flag=true;
}
}
}
if($flag){
//有効なログインIDとパスワードが入力された場合
echo "<p>ユーザー名:".$HTTP_SERVER_VARS['PHP_AUTH_USER']."</p>";
echo "<p>パスワード:".$HTTP_SERVER_VARS['PHP_AUTH_PW']."</p>";
}else{
//無効なログインIDまたはパスワードが入力された場合
//再度、ダイアログを表示するヘッダーを送信
echo "<p>有効なログインIDとパスワードを入力して下さい。</p>\n";
header("WWW-Authenticate: Basic realm=\"".$realm."\"");
header("HTTP/1.0 401 Unauthorized");
die("ユーザーがキャンセルボタンを押した時に送信されるテキスト\n");
}
}
?>
$_GET
HTTP GET変数
unknown
$HTTP_GET_VARS
HTTP GETメソッドを通して渡された情報が格納された連想配列。
フォームをGETで送信すると、http://mydomain.com/test.php?name=PJ&age=20
のように、送信先URLの末尾にフォームに入力したデータが引数として表示されます。
$_GET
(PHP4.1.0未満は$HTTP_GET_VARS
)には、送信されたデータの名前と値が格納されています。
$_GET['name']
(PHP4.1.0未満は$HTTP_GET_VARS['age']
)として個々に値を取得できます。
<!--
【送信先のtest.phpの中身】
<?
function escapeDate($sendData){
$escapeArr = $sendData;
foreach($escapeArr as $key => $val){
if(!(is_array($val))){
$val = htmlspecialchars($val, ENT_QUOTES, 'UTF-8');
if (get_magic_quotes_gpc()) {
$val = stripslashes($val);
}
$escapeArr[$key] = $val;
}
}
return $escapeArr;
}
echo "<p style='color:green'>========== 送信された値 ==========</p>";
echo "<pre>";
if(isset($_POST) && !empty($_POST)){
print_r(escapeDate($_POST));
}else if(isset($_GET) && !empty($_GET)){
print_r(escapeDate($_GET));
}else if(isset($_REQUEST)){
print_r(escapeDate($_REQUEST));
}
echo "</pre>";
?>
-->
<form action="/content/demo/test.php" method="get">
名前:<input type="text" name="name" size="10" maxlength="256" />
年齢:<input type="text" name="age" size="2" maxlength="2" />
<input type="submit" value="GET送信" />
</form>
$_POST
HTTP POST変数
unknown
$HTTP_POST_VARS
HTTP POSTメソッドを通して渡された情報が格納された連想配列。
フォームをPOSTで送信すると、GETと異なり、送信先URLの末尾に引数は表示されません。
$_POST
(PHP4.1.0未満は$HTTP_POST_VARS
)には、送信されたデータの名前と値が格納されています。
$_POST['name']
(PHP4.1.0未満は$HTTP_POST_VARS['name']
)として個々に値を取得できます。
<!--
【送信先のtest.phpの中身】
<?
function escapeDate($sendData){
$escapeArr = $sendData;
foreach($escapeArr as $key => $val){
if(!(is_array($val))){
$val = htmlspecialchars($val, ENT_QUOTES, 'UTF-8');
if (get_magic_quotes_gpc()) {
$val = stripslashes($val);
}
$escapeArr[$key] = $val;
}
}
return $escapeArr;
}
echo "<p style='color:green'>========== 送信された値 ==========</p>";
echo "<pre>";
if(isset($_POST) && !empty($_POST)){
print_r(escapeDate($_POST));
}else if(isset($_GET) && !empty($_GET)){
print_r(escapeDate($_GET));
}else if(isset($_REQUEST)){
print_r(escapeDate($_REQUEST));
}
echo "</pre>";
?>
-->
<form action="/content/demo/test.php" method="post">
名前:<input type="text" name="name" size="10" maxlength="256" />
年齢:<input type="text" name="age" size="2" maxlength="2" />
<input type="submit" value="POST送信" />
</form>
$_ENV
環境変数
unknown
$HTTP_ENV_VARS
ALLUSERSPROFILE、 CLASSPATH、 CommonProguramFiles、 COMPUTERNAME、 OS、 Path、 PATHEXT、 PROCESSOR_ARCHITECTURE、 ProgramFiles、 SystemDrive、 SystemRoot、 TEMP、 TMP、 USERPROFILE、 windir等、 PHPの環境に関する情報が格納されています。
PHPが実行されている環境に依存するため、確定的に定義されている環境変数を取得することは不可能です。
$_FILES
HTTP ファイルアップロード変数
unknown
$HTTP_POST_FILES
HTTP POSTメソッドを通じてアップロードされたファイル情報が格納された連想配列。
$HTTP_POST_FILES
と$_FILES
は同じ情報を持っていますが、変数としては別物です。
$HTTP_POST_FILES
は自動的にはグローバル扱いされません。
そのため$HTTP_POST_FILES
に関数やメソッドの中からアクセスする場合は、
global $HTTP_POST_FILES
として参照する必要があります。
$_FILE変数 | 説明 |
---|---|
$_FILES['UploadFile']['name'] | クライアントマシンの元のファイル名 |
$_FILES['UploadFile']['type'] | ファイルのMIMEタイプ |
$_FILES['UploadFile']['tmp_name'] | サーバー上で保存されているテンポラリファイル名 |
$_FILES['UploadFile']['error'] | このファイルアップロードに関する エラーコード |
$_FILES['UploadFile']['size'] | アップロードされたファイルのバイト単位のサイズ |
⇒ この変数を使用したファイル関連の解説は、ファイルシステム関数にあります。
$_REQUEST
リクエスト変数
unknown
$_GET、$_POST、$_COOKIE、$_FILESの内容を格納した連想配列。
PHP4.1.0未満のバージョンではサポートされていません
$_SESSION
セッション変数
unknown
$HTTP_SESSION_VARS
セッション情報が格納された配列。