PHPでREMOTE_HOSTを取得するために必要なApacheの設定
投稿日:2017年03月22日
最終更新日:
もくじ
- リモートホスト情報($_SERVER[‘REMOTE_HOST’])とは
- Apacheの設定ファイル(httpd.conf)をいじれる場合の対処法
- 設定ファイルをいじれない場合の対処法
リモートホスト情報($_SERVER[‘REMOTE_HOST’])とは
「リモートホスト」の本来の意味は、ネットワークを介して接続した先の機器です(対義語はローカルホスト)。しかし、サーバーに接続してくるクライアントのホスト名のことをリモートホスト(さらに略すと「リモホ」)と呼ぶ場合もあり、本ページで登場する「リモートホスト」もこちらの用法です。
さて、PHPで使用できるスーパーグローバル変数の一つに「$_SERVER」というものがあります。その中には、接続してきたユーザーの情報(IPアドレスなど)もセットされており、リモートホストの情報は$_SERVER[‘REMOTE_HOST’]から取得できるようになっています(IPアドレスは$_SERVER[‘REMOTE_ADDR’]から取得できます)。
Apacheの設定ファイル(httpd.conf)をいじれる場合の対処法
リモートホスト情報($_SERVER[‘REMOTE_HOST’])を取得できない原因としては、Apacheの設定が考えられます。Apache2.4では、デフォルトではHostnameLookupsがOffとなっており、DNSの逆引きが行われません。そのため、$_SERVER[‘REMOTE_HOST’]を取得しようとしても、変数の中身は空っぽなのです。
httpd.confを編集できるのであれば、HostnameLookupsを有効化すれば$_SERVER[‘REMOTE_HOST’]の値を取得できるようになります。 [VIM] sudo vim /etc/httpd/conf/httpd.conf #設定ファイルの最終行あたりに #以下のディレクティブを追記 HostnameLookups On #DNS逆引きした結果を正引きさせる場合はこちら HostnameLookups Double [/VIM] httpd.confを編集した後、Apacheを再起動すればOKです。 [VIM] sudo systemctl restart httpd [/VIM]
設定ファイルをいじれない場合の対処法
ただ、サーバーのroot権限を持っていない場合はhttpd.confの中身を変更できないことがほとんどであると思われます。その場合は、gethostbyaddr関数を利用すればIPアドレスからホスト名を取得でき、$_SERVER[‘REMOTE_HOST’]の代替となります。ユーザーのIPアドレスは$_SERVER[‘REMOTE_ADDR’]から取得できるので、これを利用しましょう。
[VIM] [/VIM]