UPDATE:2024年08月09日
PHP $_SERVER(サーバー変数)のすべて【初心者向け基本】
目次 [閉じる]
$_SERVER(サーバー変数)簡単まとめ
- $_SERVER(サーバー変数) は ヘッダ情報、パス情報、スクリプトの位置のような情報を提供する
- $_SERVER は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_SERVER の提供する情報はウェブサーバーに依存する
- $_SERVER は 連想配列として使用する
- $_SERVER は、関数やメソッドの内部で使用する場合、global $_SERVER; とする必要がない
$_SERVER(サーバー変数)とは
$_SERVER(サーバー変数) は、PHPが稼働しているウェブサーバーが生成するヘッダ情報、パス情報、スクリプトの位置のような情報を提供します。$_SERVER(サーバー変数)は連想配列として、$_SERVER['キー名']という形で呼び出します。例えば、$_SERVER['PHP_SELF'] では、現在実行しているPHPスクリプトのファイル名情報を提供し、$_SERVER['SERVER_ADDR'] では、現在スクリプトが実行されているサーバーの IP アドレス情報を提供します。
簡単な例
1 2 3 4 5 6 | <?php //現在実行しているスクリプトのファイル名です。 echo '[PHP_SELF] : '.$_SERVER['PHP_SELF']."<br>\n"; //現在のスクリプトが実行されているサーバの IP アドレスです。 echo '[SERVER_ADDR] : '.$_SERVER['SERVER_ADDR']."<br>\n"; ?> |
結果は
[SERVER_ADDR] : 120.136.10.96
となります。
REMOTE_ADDR では、ウェブページにアクセスしているクライアントユーザーのIPアドレスが確認できます。
1 2 3 4 | <?php //現在ウェブページにアクセスしているクライアントユーザーのIPアドレスです。 echo '[REMOTE_ADDR] : '.$_SERVER['REMOTE_ADDR']."<br>\n"; ?> |
使用可能なサーバー変数はウェブサーバーに依存する
上記の例では、$_SERVER['PHP_SELF'] で実行ファイル名、$_SERVER['SERVER_ADDR']で実行サーバーのIPアドレス、の情報が提供されますが、その他にも様々な種類の $_SERVER(サーバー変数) があります(以下の表を参照)。必要な情報に応じて $_SERVER を選ぶことになりますが、提供される $_SERVER['・・・'] の種類はウェブサーバーに依存します。全てのウェブサーバーがこれら全てを提供する保障はありません。サーバー環境によっては、これらの幾つかを省略したり、または、これらの一覧にない他のものを定義する可能性があります。ウェブサーバーによって提供される情報と提供されない情報があります。現在のウェブサーバーが提供するエントリーを調べるには var_dump($_SERVER); で確認することが出来ます。
1 2 3 | <pre> <?php var_dump($_SERVER); ?> </pre> |
様々な種類の $_SERVER がありますので、詳しくは以下の表を参照下さい。
$_SERVER(サーバー変数) の種類
$_SERVER['PHP_SELF'] | 現在実行しているスクリプトのファイル名です。 ドキュメントルートから取得されます。 例えば、http://example.com/test.php/foo.bar というアドレス上にあるスクリプトでは $_SERVER['PHP_SELF'] は /test.php/foo.bar となります。 __FILE__ 定数 には、カレント(すなわち読み込まれた)ファイルのパスとファイル名が含まれます。 PHP がコマンドラインから実行される場合、PHP 4.3.0 以降、 この変数にはスクリプト名が含まれます。これより前のバージョンでは、 この変数は使用できません。 |
---|---|
$_SERVER['GATEWAY_INTERFACE'] | サーバが使用している CGI のバージョンです。 例 'CGI/1.1' |
$_SERVER['SERVER_ADDR'] | 現在のスクリプトが実行されているサーバの IP アドレスです。 |
$_SERVER['SERVER_NAME'] | 現在のスクリプトが実行されているサーバのホスト名です。 スクリプトがバーチャルホスト上で実行されている場合は そのバーチャルホスト名となります。 |
$_SERVER['SERVER_SOFTWARE'] | レスポンスヘッダ上に書かれている、 サーバの認識文字列です。 |
$_SERVER['SERVER_PROTOCOL'] | ページがリクエストされた際のプロトコル名とバージョンです。 例.'HTTP/1.0' |
$_SERVER['REQUEST_METHOD'] | ページにアクセスする際に使用されたリクエストのメソッド名です。 'GET', 'HEAD', 'POST', 'PUT' など。注意:リクエストのメソッドが HEAD だった場合、 PHP スクリプトはヘッダを送信した後(言い換えれば、 出力バッファリングを行わずに全出力を処理した後)に終了します。 |
$_SERVER['REQUEST_TIME'] | リクエストの開始時のタイムスタンプ。PHP 5.1.0 以降で利用可能。 |
$_SERVER['REQUEST_TIME_FLOAT'] | リクエストの開始時のタイムスタンプ (マイクロ秒までの精度)。 |
$_SERVER['QUERY_STRING'] | ページがアクセスされた際にもし検索引数があればそれが格納されます。 |
$_SERVER['DOCUMENT_ROOT'] | 現在実行されているスクリプトが存在するドキュメントルート ディレクトリです。サーバのコンフィグレーションファイルで 定義されています。 |
$_SERVER['HTTP_ACCEPT'] | 現在のリクエストの Accept: ヘッダがもしあれば その内容。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 現在のリクエストの Accept-Charset: ヘッダが もしあればその内容。例: 'iso-8859-1,*,utf-8' |
$_SERVER['HTTP_ACCEPT_ENCODING'] | 現在のリクエストに Accept-Encoding: ヘッダが もしあればその内容。例: 'gzip' |
$_SERVER['HTTP_ACCEPT_LANGUAGE'] | 現在のリクエストに Accept-Language: ヘッダが もしあればその内容。例: 'en' |
$_SERVER['HTTP_CONNECTION'] | 現在のリクエストに Connection: ヘッダが もしあればその内容。例: 'Keep-Alive' |
$_SERVER['HTTP_HOST'] | 現在のリクエストに Host: ヘッダが もしあればその内容。 |
$_SERVER['HTTP_REFERER'] | 現在のページに遷移する前にユーザエージェントが参照していた ページのアドレス(もしあれば)。これはユーザエージェントに よってセットされます。全てのユーザエージェントが これをセットしているわけではなく、また、HTTP_REFERER を変更する機能を持つものもああります。 要するに、信頼するべきものではありません。 |
$_SERVER['HTTP_USER_AGENT'] | 現在のリクエストに User-Agent: ヘッダが もしあればその内容。ページにアクセスしてきているユーザエージェント のしるしの文字列です。典型的な例は、 Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。たとえば、 get_browser() でこの値を使って ページの出力をそのブラウザにあわせたものにすることも できるでしょう。 |
$_SERVER['HTTPS'] | スクリプトが HTTPS プロトコルを通じて実行されている場合に 空でない値が設定されます。注意: ISAPI を IIS で使用している場合は、HTTPS プロトコルを通さないでリクエストが行われたときの値は off となることに注意しましょう。 |
$_SERVER['REMOTE_ADDR'] | 現在ページをみているユーザの IP アドレス。 |
$_SERVER['REMOTE_HOST'] | 現在のページにアクセスしているユーザーのホスト名。DNS の逆引き検索は ユーザの REMOTE_ADDR に基づいています。注意: Web サーバがこの値を生成できるように設定されている必要があります。 例えば Apache の場合 HostnameLookups On が httpd.conf に設定されていなければこの値は生成されません。 gethostbyaddr() もご覧ください。 |
$_SERVER['REMOTE_PORT'] | ユーザのマシンから Web サーバへの通信に使用されているポート番号 |
$_SERVER['REMOTE_USER'] | 認証されたユーザー |
$_SERVER['REDIRECT_REMOTE_USER'] | リクエストが内部でリダイレクトされた場合の認証されたユーザー。 |
$_SERVER['SCRIPT_FILENAME'] | 現在実行されているスクリプトの絶対パス※注意:file.php あるいは ../file.php のような相対パスを指定して CLI でスクリプトが実行されている場合、 $_SERVER['SCRIPT_FILENAME'] には ユーザが指定した相対パスが含まれます。 |
$_SERVER['SERVER_ADMIN'] | Web サーバの設定ファイルの SERVER_ADMIN (Apache の場合)ディレクティブ にセットされている値。スクリプトがバーチャルホスト上で 実行されている場合、バーチャルホストに対して値が定義されます。 |
$_SERVER['SERVER_PORT'] | Web サーバの通信ポートとして使用されているポート番号。デフォルトでは '80' ですが、例えば SSL を使用している場合は セキュア HTTP ポートとして設定されている値に変わります。 |
$_SERVER['SERVER_SIGNATURE'] | サーバ上で生成されたページに追加される、 サーバのバージョン名とバーチャルホスト名の文字列。 Web サーバの設定で有効になっていることが必要です。 |
$_SERVER['PATH_TRANSLATED'] | バーチャルからリアルへのマッピングがなされた後の、 現在のスクリプトのファイルシステム上(ドキュメントルートではなく) でのパス。注意: PHP 4.3.2 以降、PATH_TRANSLATED は、 Apache 2 SAPI において暗黙のうちに設定されなく なりました。一方、Apache 1 では、この値が Apache により設定されない場合、 SCRIPT_FILENAME と同じ値に設定されます。 この変更は、PATH_TRANSLATED は PATH_INFO が定義されている場合のみ 存在するべきであるという CGI の規約を満たすために 行われました。 Apache 2 ユーザは、PATH_INFO を定義するために httpd.conf の中で AcceptPathInfo = On を使用することが可能です。 |
$_SERVER['SCRIPT_NAME'] | 現在のスクリプトのパス。 スクリプト自身のページを指定するのに有用です。 __FILE__ 定数には、カレント(すなわち読み込まれた)ファイルのパスとファイル名が 含まれます。 |
$_SERVER['REQUEST_URI'] | ページにアクセスするために指定された URI。例えば、 '/index.html' |
$_SERVER['PHP_AUTH_DIGEST'] | HTTP ダイジェスト認証を 行っている場合、クライアントから送られた 'Authorization' ヘッダの 内容が設定されます(適切な認証処理を行うために利用します)。 |
$_SERVER['PHP_AUTH_USER'] | HTTP 認証しているときにそのユーザ名がセットされます。 |
$_SERVER['PHP_AUTH_PW'] | HTTP 認証しているときにそのユーザの パスワードがセットされます。 |
$_SERVER['AUTH_TYPE'] | HTTP 認証しているときにその認証形式がセットされます。 |
$_SERVER['PATH_INFO'] | 実際のスクリプトファイル名とクエリ文字列の間にある、クライアントが提供するパス名情報。 たとえば、現在のスクリプトに http://www.example.com/php/path_info.php/some/stuff?foo=bar という URL でアクセスしていた場合の $_SERVER['PATH_INFO'] は /some/stuff となります。 |
$_SERVER['ORIG_PATH_INFO'] | PHP で処理される前の 'PATH_INFO' の原本。 |
$_SERVERを関数やメソッドの内部で使用する場合
通常、関数外部で宣言された変数は global キーワードで引き渡さなければ、関数内部で利用できません。
例えば、
1 2 3 4 5 6 7 | <?php $name = '山田'; function hello(){ echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
global キーワードで関数内部へ変数を引き渡すと
1 2 3 4 5 6 7 8 | <?php $name = '山田'; function hello(){ global $name; echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
ですが、$_SERVERを使用すると global $_SERVER; と宣言しなくても関数内部で使用できます。
1 2 3 4 5 6 | <?php function hello(){ echo 'こんにちは、'.$_SERVER['HTTP_USER_AGENT'].'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
$_SERVERはPHPの定義済み変数
- $_SERVER は PHPの定義済み変数(=スーパーグローバル変数)の1つ
$_SERVERは、PHPの定義済み変数の内の1つの変数です。データ型は配列です。PHPには定義済み変数が複数あります。其の中の1つが$_SERVERです。PHPの定義済み変数はスーパーグローバル変数とも言います。$_SERVER = PHPの定義済み変数 = スーパーグローバル変数。また、$_SERVERは自動グローバル変数とも呼ばれます。
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)
PHPの定義済み変数(=スーパーグローバル変数)
$GLOBALS (グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照 ・連想配列として使用 |
---|---|
$_SERVER (サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用 |
$_GET (ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST (ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES (ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST (リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION (セッション変数) | ・セッション変数 ・連想配列として使用 |
$_ENV (環境変数) | ・環境変数 ・連想配列として使用 |
$_COOKIE (クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。
※注意:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。
可変変数についてはこちらを参照下さい。
サンプルコード
1 2 3 4 5 6 7 | <h3>$_SERVER変数</h3> <?php echo '[ PHP_SELF] : '.$_SERVER['PHP_SELF']."<br>\n"; echo '[ HTTP_USER_AGENT] : '.$_SERVER['HTTP_USER_AGENT']."<br>\n"; //・・・ //・・ ?> |
[ PHP_SELF] : /code-example/php/3-5-4.php
[ HTTP_USER_AGENT] : Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36
var_dumpで$_SERVERのエントリを確認
var_dump関数で$_SERVERのエントリを確認してみましょう。ウェブサーバーによってエントリが変わる場合があります。
1 2 3 | <pre> <?php var_dump($_SERVER); ?> </pre> |
その他サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php echo '[PHP_SELF] : '.$_SERVER['PHP_SELF']."<br>\n"; echo '[GATEWAY_INTERFACE] : '.$_SERVER['GATEWAY_INTERFACE']."<br>\n"; echo '[SERVER_ADDR] : '.$_SERVER['SERVER_ADDR']."<br>\n"; echo '[SERVER_NAME] : '.$_SERVER['SERVER_NAME']."<br>\n"; echo '[SERVER_SOFTWARE] : '.$_SERVER['SERVER_SOFTWARE']."<br>\n"; echo '[SERVER_PROTOCOL] : '.$_SERVER['SERVER_PROTOCOL']."<br>\n"; echo '[REQUEST_METHOD] : '.$_SERVER['REQUEST_METHOD']."<br>\n"; echo '[REQUEST_TIME] : '.$_SERVER['REQUEST_TIME']."<br>\n"; echo '[REQUEST_TIME_FLOAT] : '.$_SERVER['REQUEST_TIME_FLOAT']."<br>\n"; echo '[QUERY_STRING] : '.$_SERVER['QUERY_STRING']."<br>\n"; echo '[DOCUMENT_ROOT] : '.$_SERVER['DOCUMENT_ROOT']."<br>\n"; echo '[HTTP_ACCEPT] : '.$_SERVER['HTTP_ACCEPT']."<br>\n"; echo '[HTTP_ACCEPT_CHARSET] : '.$_SERVER['HTTP_ACCEPT_CHARSET']."<br>\n"; echo '[HTTP_ACCEPT_ENCODING] : '.$_SERVER['HTTP_ACCEPT_ENCODING']."<br>\n"; echo '[HTTP_ACCEPT_LANGUAGE] : '.$_SERVER['HTTP_ACCEPT_LANGUAGE']."<br>\n"; echo '[HTTP_CONNECTION] : '.$_SERVER['HTTP_CONNECTION']."<br>\n"; echo '[HTTP_HOST] : '.$_SERVER['HTTP_HOST']."<br>\n"; echo '[HTTP_REFERER] : '.$_SERVER['HTTP_REFERER']."<br>\n"; echo '[HTTP_USER_AGENT] : '.$_SERVER['HTTP_USER_AGENT']."<br>\n"; echo '[HTTPS] : '.$_SERVER['HTTPS']."<br>\n"; echo '[REMOTE_ADDR] : '.$_SERVER['REMOTE_ADDR']."<br>\n"; echo '[REMOTE_HOST] : '.$_SERVER['REMOTE_HOST']."<br>\n"; echo '[REMOTE_PORT] : '.$_SERVER['REMOTE_PORT']."<br>\n"; echo '[REMOTE_USER] : '.$_SERVER['REMOTE_USER']."<br>\n"; echo '[REDIRECT_REMOTE_USER] : '.$_SERVER['REDIRECT_REMOTE_USER']."<br>\n"; echo '[SCRIPT_FILENAME] : '.$_SERVER['SCRIPT_FILENAME']."<br>\n"; echo '[SERVER_ADMIN] : '.$_SERVER['SERVER_ADMIN']."<br>\n"; echo '[SERVER_PORT] : '.$_SERVER['SERVER_PORT']."<br>\n"; echo '[SERVER_SIGNATURE] : '.$_SERVER['SERVER_SIGNATURE']."<br>\n"; echo '[PATH_TRANSLATED] : '.$_SERVER['PATH_TRANSLATED']."<br>\n"; echo '[SCRIPT_NAME] : '.$_SERVER['SCRIPT_NAME']."<br>\n"; echo '[REQUEST_URI] : '.$_SERVER['REQUEST_URI']."<br>\n"; echo '[PHP_AUTH_DIGEST] : '.$_SERVER['PHP_AUTH_DIGEST']."<br>\n"; echo '[PHP_AUTH_USER] : '.$_SERVER['PHP_AUTH_USER']."<br>\n"; echo '[PHP_AUTH_PW] : '.$_SERVER['PHP_AUTH_PW']."<br>\n"; echo '[AUTH_TYPE] : '.$_SERVER['AUTH_TYPE']."<br>\n"; echo '[PATH_INFO] : '.$_SERVER['PATH_INFO']."<br>\n"; echo '[ORIG_PATH_INFO] : '.$_SERVER['ORIG_PATH_INFO']."<br>\n"; ?> |
タグ(=記事関連ワード)
日付
最終更新日:2024年08月09日