PHPでアクセス元の情報を調べたいと思っていると、プログラマが何も言っていないのに勝手にサーバー変数($_SERVER)をprint_rし始め
「REMOTE_HOSTが見えないの」
そう言った。
あなたならどうする……? 最高だった……。
サイトで$_SERVERの中身を見てみると、いろんな情報が配列で入っているわけなんですが、サイトによって見える情報が微妙に違っていることがあります。
例えば「REMOTE_HOST」
これはアクセス元のホスト名が入ってます。
これが取れるときと取れないときがある。まあ、取れなくてもそんなに困るような場面ってない気もするんですが「どーしても取りたい。あー取りたい。カルタ大会で残りの札が一枚になったときくらい取りたい」っていうことも、時にはあるかもしれません。
しかし取り方が分からない。残り一枚しかないから読み札が読まれるまでもなくどの札を取れば良いかは分かるのに、確実に取る方法が分からない。
どうしても分からない。もう悲しくて涙が出てきちゃう。
そんなときは、ハンカチを用意すると良いと思います。
そして涙を拭いて、改めて$_SERVERをprint_rで出力した画面を見てみると……
何と。
今まで見えていなかったはずのREMOTE_HOSTの文字が画面上に……
出力されてはいませんね、はい。
そのうちの一つは、httpd.confを書き換えること。
httpd.confの中を見ると、こんな一文があります。
これがOffになっていると、REMOTE_HOSTは見えないようです。なので、これをOnにすれば良い。
ただ、これをOnにするとサーバーのパフォーマンスが落ちるみたいですね。
詳しいことはいつものごとくよく分からないんですが、ホストの逆引きがどーのこーのっていう話で、まあとにかく若干サーバーへの負荷が高くなるみたいです。
アクセスのそんなに多くないサイトだったら気にするほどではないようですけどね。ウチくらいのアクセスだったらぜーんぜん気にするほどじゃない。
ってか、あかつきのお宿が動いてるサーバー(さくらインターネットの共用サーバー)はREMOTE_HOSTが普通に取れるっぽいんですけどね。共用だからhttpd.confはいじれないんだけど、HostnameLookupsがOnになってるのかな?
$_SERVERの中を見ると「REMOTE_ADDR」というのもあると思います。これはアクセス元のIPアドレスですね。
これを使ってアクセス元のホスト名を取得することができます。
こんな感じ。
アクセス制限をするときに、ホスト名で制限をかける場合なんかに、この値が必要になることがあるかもですねー。
僕も今回、そんなような設定をする必要に駆られたから調べたんですけど、結局はIPアドレスで制限をかけることになったから、意味なかったっつーお話ですわい^^;
「REMOTE_HOSTが見えないの」
そう言った。
あなたならどうする……? 最高だった……。
サイトで$_SERVERの中身を見てみると、いろんな情報が配列で入っているわけなんですが、サイトによって見える情報が微妙に違っていることがあります。
例えば「REMOTE_HOST」
これはアクセス元のホスト名が入ってます。
これが取れるときと取れないときがある。まあ、取れなくてもそんなに困るような場面ってない気もするんですが「どーしても取りたい。あー取りたい。カルタ大会で残りの札が一枚になったときくらい取りたい」っていうことも、時にはあるかもしれません。
しかし取り方が分からない。残り一枚しかないから読み札が読まれるまでもなくどの札を取れば良いかは分かるのに、確実に取る方法が分からない。
どうしても分からない。もう悲しくて涙が出てきちゃう。
そんなときは、ハンカチを用意すると良いと思います。
そして涙を拭いて、改めて$_SERVERをprint_rで出力した画面を見てみると……
何と。
今まで見えていなかったはずのREMOTE_HOSTの文字が画面上に……
出力されてはいませんね、はい。
httpd.confを書き換えれば見えるようになる
REMOTE_HOSTを取得する方法は、主に二つあります。そのうちの一つは、httpd.confを書き換えること。
httpd.confの中を見ると、こんな一文があります。
HostnameLookups Off
これがOffになっていると、REMOTE_HOSTは見えないようです。なので、これをOnにすれば良い。
//viモードで編集
# vi /etc/httpd/conf/httpd.conf
HostnameLookups Off
→HostnameLookups On
ただ、これをOnにするとサーバーのパフォーマンスが落ちるみたいですね。
詳しいことはいつものごとくよく分からないんですが、ホストの逆引きがどーのこーのっていう話で、まあとにかく若干サーバーへの負荷が高くなるみたいです。
アクセスのそんなに多くないサイトだったら気にするほどではないようですけどね。ウチくらいのアクセスだったらぜーんぜん気にするほどじゃない。
ってか、あかつきのお宿が動いてるサーバー(さくらインターネットの共用サーバー)はREMOTE_HOSTが普通に取れるっぽいんですけどね。共用だからhttpd.confはいじれないんだけど、HostnameLookupsがOnになってるのかな?
REMOTE_ADDRから取ることも可能
ってなことで上の方法はあまり推奨されてないっぽい空気なので、もう一つの方法で行きましょう。$_SERVERの中を見ると「REMOTE_ADDR」というのもあると思います。これはアクセス元のIPアドレスですね。
これを使ってアクセス元のホスト名を取得することができます。
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
こんな感じ。
アクセス制限をするときに、ホスト名で制限をかける場合なんかに、この値が必要になることがあるかもですねー。
僕も今回、そんなような設定をする必要に駆られたから調べたんですけど、結局はIPアドレスで制限をかけることになったから、意味なかったっつーお話ですわい^^;