PHP

PHP実行環境の情報を取得する:$_SERVER

  1. 最終更新日:
  2. 公開日:

システム構築を行なっていると、サーバーや実行環境に関する情報を取得したい時があります。そんな時はPHPがスーパーグローバルとして用意している「$_SERVER」変数を使うと必要な情報を取得できるかもしれません。今回はこの変数の中身と、基本的な使い方について解説します。

この記事のポイント

  • $_SERVERに入っている情報を確認する

$_SERVERとは

スーパーグローバル変数として定義されている「$_SERVER」。
PHPが実行されると自動的にこの変数へサーバーに関する情報が格納されるようになっています。

この変数にはPHPが実行される環境についての情報が多く含まれており、この変数を参照することでドメインやパス(ドキュメントルート)、リクエストされたURL、PHPやWebサーバーのソフト名やバージョン、SSLが有効かなどを確認することができます。

そのため、もし実行環境によってシステム動作を動的に変更したい場合には非常に便利な変数です。

$_SERVERの主要な中身

変数名内容
HTTP_HOSTホスト名。「http://」より下のドメイン。(例:gray-code.com
HTTPSSSL通信が使われているかを確認する。(例:on
HTTP_CONNECTIONConnectionヘッダの中身。(例:keep-alive
HTTP_USER_AGENTページへアクセスしたユーザーの環境情報。ブラウザやOSの種類とバージョン。
(例:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
HTTP_ACCEPT利用可能なMIMEタイプ。(例:text/html,application/xhtml+xml
HTTP_ACCEPT_ENCODING利用可能なエンコーディング形式。(例:gzip, deflate
HTTP_ACCEPT_LANGUAGE利用可能な言語コード。(例:ja,en-US
SERVER_SOFTWAREPHPの実行環境。WebサーバーのソフトやPHPのバージョンが入る。(例:Apache/2.4.23 (Unix) PHP/5.6.9
SERVER_ADDRサーバーのIPアドレス
SERVER_PORTサーバーのPORT番号。(例:80
REMOTE_ADDRアクセスしたユーザーのIPアドレス。
DOCUMENT_ROOTWebサーバーのドキュメントルート(Web用公開パス)。(例:/var/www/html/
SERVER_ADMINサーバー管理用のメールアドレス。(例:you@example.com
SCRIPT_FILENAME実行されたスクリプトのパスとファイル名。(例:/var/www/html/index.php
REMOTE_PORTユーザーがサーバーへ接続しているポート番号。
GATEWAY_INTERFACEサーバーのCGIのバージョン。(例:CGI/1.1
SERVER_PROTOCOLページをリクエストしたプロトコル名とバージョン。(例:HTTP/1.1
PHP_SELF実行したPHPファイル名。(例:/index.php
REQUEST_TIMEリクエスト開始時のタイムスタンプ。
REQUEST_TIME_FLOATリクエスト開始時のタイムスタンプ。マイクロ秒単位で取得。

より詳しい内容を確認したい場合はphp.netの下記ページを参照ください。
$_SERVER - php.net

$_SERVERの内容を確認

単純に内容を出力して確認したいばあいは、次のようにvar_damp関数を使用します。

PHP コード例

<?php
var_dump($_SERVER);

サーバー情報が出力されるため主に開発の用途での使用となりますが、設定値が使用したい値になっているかを確認するときは最も手っ取り早い方法です。

SSLが有効か確認

PHPが実行されたときに、SSL(https://〜)が有効であるかを確認したい場合は、次のように確認を行います。

PHP コード例

<?php
if( !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ){
  // SSL有効な時の処理を記述
} else {
  // 通常のhttp://〜通信時の処理を記述
}

解説

PHP実行時にSSL通信が有効だった場合、$_SERVER['HTTPS']へ「on」という値が格納されます。通常のHTTP通信の場合は空です。

そのため、この値が空かどうかを確認し、上記のように正しい値が格納されているかでSSLの有効/無効を判断することが可能です。

アクセスしてきたユーザーの端末を確認

$_SERVER['HTTP_USER_AGENT']」にはページへアクセスした人の使っている端末情報が入っています。ここを参照することで、PCとスマホで表示を変更したり、特定の端末については機能制限を設けることなどが可能です。

PHP コード例

<?php
if( preg_match( '/iPhone/', $_SERVER['HTTP_USER_AGENT']) ) {
  // iPhone用の処理
} else {
  // その他の端末の処理
}

正規表現を使って、$_SERVER['HTTP_USER_AGENT']内にiPhoneに関する情報が入っているかを確認しています。もし入っている場合はiPhone専用の処理を実行します。
同様に、Android、Mac、Windowsなどを判定することも可能です。

正規表現の基本的な使い方については、別記事「文字列に特定の文字(単語)が含まれるか検索」をご覧ください。

記事一覧

関連記事