エックスサーバーのPHPでIPアドレスが取得できなくなった!? $_SERVER['SERVER_ADDR']が127.0.0.1を返す時の対処法

PHPの変数$_SERVER['SERVER_ADDR']でIPアドレスを取得していたんですが、エックスサーバーのサイトで急に127.0.0.1を返すようになってしまったので、その対策。

$_SERVER['SERVER_ADDR']以外のIPアドレスを取得する方法

$_SERVER['SERVER_ADDR']が使えない時は、下記のようにすればIPアドレスを取得できます。
$ip = getHostByName(php_uname('n')); 
php_uname('n')でドメイン名が返ってきますので、そこからgetHostByNameでIPアドレスに変換しています。 ちなみにローカル環境だと、php_uname('n')はPC名を返してくれます。

ローカルと本番環境の判別

実は単純にIPアドレスを取得するというよりも、ローカルと本番環境で挙動を変えたいときに良く使用しています。 その場合IPアドレスに変換せずとも、
if(php_uname('n')==="***.xserver.jp")
で本番環境のホスト名かどうかで判別した方がいいですね。

まとめ

多分最近あったエックスサーバーのメンテナンスでちょっと設定が変わったんでしょう。 とりあえず$_SERVER['SERVER_ADDR']を使っていたところは全部php_uname('n')に差し替えました。 あーびっくりした。