PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの$_SERVERとは?サーバー情報を取得できるスーパーグローバル変数の使い方を徹底解説

はじめに

$_SERVERは、PHPにあらかじめ用意されているスーパーグローバル変数の一つで、HTTPヘッダー、パス情報、スクリプトの場所など、サーバーや実行環境に関するさまざまな情報を連想配列として保持しています。この配列内のほとんどの項目はWebサーバーによって自動的に生成されます。

なお、PHP 5.4.0より前のバージョンでは同じ情報を持つ$HTTP_SERVER_VARSという変数が存在しましたが、現在では廃止されています。本記事では、$_SERVER配列の中でも特によく使われる主要な要素について、具体例とともに詳しく解説します。

$_SERVERの主な要素一覧

PHP_SELF ― 実行中のスクリプト名

現在実行中のスクリプトのファイル名をドキュメントルートからの相対パスで返します。例えば、ローカルサーバーのドキュメントルート直下にあるtestフォルダ内のスクリプトの場合、以下のように出力されます。

<?php
echo $_SERVER['PHP_SELF'];
?>

ブラウザで「https://localhost/test/testscript.php」というURLにアクセスした場合の出力結果は次のとおりです。

/test/testscript.php

SERVER_ADDR ― サーバーのIPアドレス

現在実行中のスクリプトが稼働しているサーバーのIPアドレスを返します。

SERVER_NAME ― サーバーホスト名

現在実行中のスクリプトが稼働しているサーバーのホスト名を返します。ローカル環境で実行している場合はlocalhostが返されます。

QUERY_STRING ― クエリ文字列

クエリ文字列とは、「key=value」形式のペアを&記号でつなぎ、URLの末尾に?記号以降で付加した文字列のことです。例えば、https://localhost/testscript?name=xyz&age=20というURLにアクセスした場合、末尾のクエリ文字列が取得できます。

REQUEST_METHOD ― HTTPリクエストメソッド

ページへのアクセスに使用されたHTTPリクエストメソッド(GET、POST、PUT、DELETEなど)を返します。上記のクエリ文字列の例のように、URLに「?」でクエリを付けてアクセスした場合、GETメソッドでリクエストされます。

DOCUMENT_ROOT ― ドキュメントルートのパス

サーバー上でドキュメントルートとして設定されているディレクトリのパスを返します。XAMPPのApacheサーバーの場合は、ドキュメントルートとして「htdocs」が返されます。

C:/xampp/htdocs

HTTP_USER_AGENT ― ユーザーエージェント(ブラウザ情報)

現在ページへアクセスしているユーザーエージェント(ブラウザ)の種類を示す文字列を返します。出力例は以下のとおりです。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

REMOTE_ADDR ― クライアントのIPアドレス

現在ページを閲覧しているユーザー側マシンのIPアドレスを返します。

SERVER_PORT ― Webサーバーのポート番号

Webサーバーが受信リクエストを待ち受けているポート番号を返します。デフォルトは80です。

すべてのサーバー変数を出力するサンプルコード

次のスクリプトをXAMPPサーバーのドキュメントルートから実行すると、$_SERVER配列に含まれるすべてのサーバー変数を一覧表示できます。

<?php
foreach ($_SERVER as $k=>$v)
echo $k . "=>" . $v . "<br>";
?>

実行結果として表示されるサーバー変数の一覧は以下のとおりです。

MIBDIRS=>C:/xampp/php/extras/mibs
MYSQL_HOME=>\xampp\mysql\bin
OPENSSL_CONF=>C:/xampp/apache/bin/openssl.cnf
PHP_PEAR_SYSCONF_DIR=>\xampp\php
PHPRC=>\xampp\php
TMP=>\xampp\tmp
HTTP_HOST=>localhost
HTTP_CONNECTION=>keep-alive
HTTP_CACHE_CONTROL=>max-age=0
HTTP_DNT=>1
HTTP_UPGRADE_INSECURE_REQUESTS=>1
HTTP_USER_AGENT=>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36
HTTP_ACCEPT=>text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
HTTP_SEC_FETCH_SITE=>none
HTTP_SEC_FETCH_MODE=>navigate
HTTP_SEC_FETCH_USER=>?1
HTTP_SEC_FETCH_DEST=>document
HTTP_ACCEPT_ENCODING=>gzip, deflate, br
HTTP_ACCEPT_LANGUAGE=>en-US,en;q=0.9,mr;q=0.8
PATH=>C:\python37\Scripts\;C:\python37\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\AMD\ATI.ACE\Core-Static;C:\python37\Scripts\;C:\python37\;C:\Users\User\AppData\Local\Microsoft\WindowsApps;C:\Users\User\AppData\Local\Programs\MiKTeX 2.9\miktex\bin\x64\;C:\MicrosoftVSCode\bin
SystemRoot=>C:\Windows
COMSPEC=>C:\Windows\system32\cmd.exe
PATHEXT=>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
WINDIR=>C:\Windows
SERVER_SIGNATURE=>
Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32 Server at localhost Port 80

SERVER_SOFTWARE=>Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32
SERVER_NAME=>localhost
SERVER_ADDR=>::1
SERVER_PORT=>80
REMOTE_ADDR=>::1
DOCUMENT_ROOT=>C:/xampp/htdocs
REQUEST_SCHEME=>http
CONTEXT_PREFIX=>
CONTEXT_DOCUMENT_ROOT=>C:/xampp/htdocs
SERVER_ADMIN=>postmaster@localhost
SCRIPT_FILENAME=>C:/xampp/htdocs/testscript.php
REMOTE_PORT=>49475
GATEWAY_INTERFACE=>CGI/1.1
SERVER_PROTOCOL=>HTTP/1.1
REQUEST_METHOD=>GET
QUERY_STRING=>
REQUEST_URI=>/testscript.php
SCRIPT_NAME=>/testscript.php
PHP_SELF=>/testscript.php
REQUEST_TIME_FLOAT=>1599118525.327
REQUEST_TIME=>1599118525

まとめ

$_SERVERは、スクリプト自身の情報やサーバー環境、アクセス元クライアントの情報など、Webアプリケーション開発において頻繁に必要となる情報をまとめて取得できる便利なスーパーグローバル変数です。用途に応じて適切なキーを指定することで、柔軟な処理を実現できます。ぜひ実際のコードで試してみてください。

  1. PHPのftp_fget()関数の使い方:FTPサーバーからファイルをダウンロードしてローカルに保存する方法

    PHPのftp_fget()関数は、FTPサーバー上のファイルをダウンロードし、あらかじめ開いておいたローカルファイルに保存するために使用します。よく似た関数のftp_get()がローカルファイルのパスを直接指定するのに対し、ftp_fget()はfopen()で取得したファイルポインタ(リソース)を引数として渡す点が特徴です。構文ftp_fget(con, local_file, server_file, mode, startpos);パラメータcon − FTP接続を示すリンクIDです。local_file − ダウンロードしたデータを書き込む、開かれた状態のローカルファイルポインタです

  2. PHPでクラウド上のSAP HANAサーバーに接続する方法

    クラウド環境で稼働しているSAP HANAサーバーにPHPから接続するには、まずサーバー名や接続情報を正しく把握しておく必要があります。ここでは、必要な情報の確認手順と、接続設定でつまずきやすいポイントについて解説します。SAP HANAサーバー名の確認方法SAP HANAサーバーのサーバー名を取得するには、仮想マシン(VM)の一覧を確認します。この一覧は、対象となるHANA SPS5サーバーの「Virtual machine details(仮想マシンの詳細)」セクション内にある「External Address(外部アドレス)」プロパティで確認できます。External Addressに表