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アプリケーション開発において頻繁に必要となる情報をまとめて取得できる便利なスーパーグローバル変数です。用途に応じて適切なキーを指定することで、柔軟な処理を実現できます。ぜひ実際のコードで試してみてください。
-
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 − ダウンロードしたデータを書き込む、開かれた状態のローカルファイルポインタです
-
PHPでクラウド上のSAP HANAサーバーに接続する方法
クラウド環境で稼働しているSAP HANAサーバーにPHPから接続するには、まずサーバー名や接続情報を正しく把握しておく必要があります。ここでは、必要な情報の確認手順と、接続設定でつまずきやすいポイントについて解説します。SAP HANAサーバー名の確認方法SAP HANAサーバーのサーバー名を取得するには、仮想マシン(VM)の一覧を確認します。この一覧は、対象となるHANA SPS5サーバーの「Virtual machine details(仮想マシンの詳細)」セクション内にある「External Address(外部アドレス)」プロパティで確認できます。External Addressに表