PHPの$_SERVER変数は種類も多く、自分のURLやホストなどを取得したいときついつい忘れて調べることも多いですね。
しかしリファレンスを見ても、なかなか思うように取得できなかったり結構手間取ることもあります。
自分用にも一覧にまとめ、いくつかサンプルを載せました。同じ悩みを抱えている方にもぜひ活用していただければと思います。
$_SERVER変数一覧
変数名 | 説明 | 出力例 |
---|---|---|
$_SERVER['SERVER_NAME'] | 現在のサーバーのホスト名 | www.flatflag.nir87.com |
$_SERVER['REQUEST_URI'] | ページにアクセスする際に指定されたURI(ドメイン以下のパス) | /index.php,/category/php/など |
$_SERVER['REQUEST_METHOD'] | 現在のページにアクセスする際に使用されたメソッド | POST,GETなど |
$_SERVER['DOCUMENT_ROOT'] | 現在実行されているスクリプトのドキュメントルートディレクトリ(ドメインルート) | /home/hoge/www |
$_SERVER['SCRIPT_FILENAME'] | 現在実行されているスクリプトの絶対パス | /home/hoge/www/php/test.php |
$_SERVER['SCRIPT_NAME'] | 現在実行されているスクリプトのパス | /test.php |
$_SERVER['SERVER_PROTOCOL'] | ページがリクエストされた際のプロトコル名/バージョン | HTTP/1.0 |
$_SERVER['QUERY_STRING'] | ページがリクエストされた際に検索引数があれば、その値 | ?page=2&id=3 |
$_SERVER['PHP_SELF'] | 現在実行されているスクリプトのファイル名 | index/php |
$_SERVER['REMOTE_ADDR'] | 訪問したユーザーのIPアドレス | 127.0.0.1 |
$_SERVER['REMOTE_PORT'] | webサーバの通信に使用されているポート番号 | 80 |
$_SERVER['REMOTE_HOST'] | 現在のユーザーのホスト名 | |
$_SERVER['HTTP_HOST'] | 現在のリクエストのホスト、ヘッダーがあればその内容 | www.flatflag.nir87.com |
$_SERVER['HTTP_REFERER'] | このページに遷移する前に参照していたページ | http://www.yahoo.co.jp |
$_SERVER['HTTP_USER_AGENT'] | 現在のリクエストのユーザーエージェント(ブラウザ)かヘッダー | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0 |
$_SERVER['HTTP_CONNECTION'] | 現在のリクエストのコネクション、ヘッダーがあればその内容 | keep-alive |
$_SERVER['SERVER_SOFTWARE'] | レスポンスヘッダ上に書かれている、 サーバーの認識文字列 | Apache/2.4.17 |
$_SERVER['REQUEST_TIME'] | リクエストの開始時のタイムスタンプ | 1456293858 |
$_SERVER['HTTP_ACCEPT'] | 現在のリクエストの Accept: ヘッダがもしあれば その内容 | text/html,application/xhtml+xml,application/xml;q=0.9 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 現在のリクエストの Accept-Charset: ヘッダが もしあればその内容 | iso-8859-1,utf-8 |
$_SERVER['HTTP_ACCEPT_ENCODING'] | 現在のリクエストに Accept-Encoding: ヘッダが もしあればその内容 | gzip |
$_SERVER['HTTP_ACCEPT_LANGUAGE'] | 現在のリクエストに Accept-Language: ヘッダが もしあればその内容 | ja |
$_SERVER['SERVER_PORT'] | Web サーバーの通信ポートとして使用されているポート番号 | 80 |
$_SERVER変数を使ったサンプル
現在のURLを表示
1 |
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; |
http://www.flatflag.nir87.com/server-358
現在アクセスしているURLを上記のように表示させました。
以下の部品から成り立っています。
- ‘http://’
- $_SERVER[‘HTTP_HOST’] → ‘www.flatflag.nir87.com’
- $_SERVER[‘REQUEST_URI’] → ‘/server-358’
URLを手打ちで指定すると、URLが変わった際に書き直さないといけませんが、こういう風にサーバー変数を使うことで、メンテナンス性にも優れますね。
imageフォルダのパスを指定する
1 |
$_SERVER['DOCUMENT_ROOT'].'/images/'; // /home/hoge/www/images/ |
イメージフォルダを指定してファイルをアップロードする際などによく使いますね。
以下のようになります。
- $_SERVER[‘DOCUMENT_ROOT’] → ‘/home/hoge/www’
- ‘/images/’
ドキュメントルートを返すサーバー変数に所定のフォルダのパスを繋げました。
POSTされたかを確認する
フォームなどでサンクスページに重要な処理を記述していた場合、ダイレクトにサンクスページにアクセスされたら不都合もありますね。
そこで、フォームからPOST経由でアクセスされたかを確認する方法です。
POST経由ではなくダイレクトでアクセスしてきたら、警告を表示し、不正アクセスを防ぎます。
1 2 3 4 5 6 7 8 9 |
if ($_SERVER["REQUEST_METHOD"] === "POST") { // 処理を記述 } else { echo '不正なアクセスです!'; } |
※本来はトークンやその他セキュリティ対策も併せて実装することが多いです。
他にも、$_SERVER['REMOTE_ADDR']
でユーザーのIPアドレスを取得し、コメントスパムを排除したり、遷移元によって処理を変えたり、さまざまなプログラムが作れますね。
サーバー変数は上記以外にもいろいろあり、サーバー環境によって変わってきます。