レシピ

スーパーグローバル変数

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

  • このエントリーをはてなブックマークに追加

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

この記事のポイント

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

目次

$_SERVERとは

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

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

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

$_SERVERの主要な中身

  • HTTP_HOST – ホスト名。「http://」より下のドメイン。(例:gray-code.com)
  • HTTPS – SSL通信が使われているかを確認する。(例:on)
  • HTTP_CONNECTION – Connectionヘッダの中身。(例: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_SOFTWARE – PHPの実行環境。WebサーバーのソフトやPHPのバージョンが入る。(例:Apache/2.4.23 (Unix) PHP/5.6.9)
  • SERVER_ADDR – サーバーのIPアドレス。
  • SERVER_PORT – サーバーのPORT番号。(例:80)
  • REMOTE_ADDR – アクセスしたユーザーのIPアドレス。
  • DOCUMENT_ROOT – Webサーバーのドキュメントルート(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)
  • SERVER_SOFTWARE – サーバーのソフト名やPHPのバージョン。(例:Apache)
  • PHP_SELF – 実行したPHPファイル名。(例:/index.php)
  • REQUEST_TIME – リクエスト開始時のタイムスタンプ。
  • REQUEST_TIME_FLOAT – リクエスト開始時のタイムスタンプ。マイクロ秒単位で取得。

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

$_SERVERの内容を確認

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

コード例

<?php
var_dump($_SERVER);

サーバー情報がもろに出力されるため開発時にのみしか使用できませんが、システム中で使用したい値があるかを確認するには最も手っ取り早い方法です。

SSLが有効か確認

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

コード例

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

解説

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

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

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

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

コード例

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

解説

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

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

  • このエントリーをはてなブックマークに追加
前のページへ 一覧ページへ一覧 次のページへ