自分のIPを知る方法。
開発は、基本的にWindows10上でやってます。
ただ、なるべく、
if (PHP_OS == "WIN32" || PHP_OS == "WINNT")
とか書きたくないわけですね。
とはいえ、
【127.0.0.1】が返ってきてしまいました。
Windows上のPHPだとちゃんとIPとってきてくれますが。
ということで、簡単にやる方法をさがしたのですが、
いくつかありました。
ひとつめ。
ちなみに、[1.1.1.1]と書いているものの、外へは出ていかないハズです。
別に、[8.8.8.8]とかでもいいわけですが。
ただし、若干問題がありまして。
DHCPでつないだあとに、ケーブルを抜いても、
過去のIPが戻ってきたりしました。
うぅーん。どうしよ。
ふたつめ。
これは強引です。
ip addr show のコマンドをリダイレクトして読んでます。
開発は、基本的にWindows10上でやってます。
ただ、なるべく、
if (PHP_OS == "WIN32" || PHP_OS == "WINNT")
とか書きたくないわけですね。
とはいえ、
$IP = getHostByName(getHostName());
なんて書いていたら、、LINUX系だと、【127.0.0.1】が返ってきてしまいました。
Windows上のPHPだとちゃんとIPとってきてくれますが。
ということで、簡単にやる方法をさがしたのですが、
いくつかありました。
ひとつめ。
ちなみに、[1.1.1.1]と書いているものの、外へは出ていかないハズです。
別に、[8.8.8.8]とかでもいいわけですが。
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($sock, "1.1.1.1", 53);//APNIC
socket_getsockname($sock,$name);
$IP = $name;
ただし、若干問題がありまして。
DHCPでつないだあとに、ケーブルを抜いても、
過去のIPが戻ってきたりしました。
うぅーん。どうしよ。
ふたつめ。
これは強引です。
ip addr show のコマンドをリダイレクトして読んでます。
shell_exec('ip addr show > a.txt');
$a = file_get_contents("a.txt");
if(preg_match("/(?!inet 127\\.0\\.0\\.1)inet [0-9]*[0-9]*[0-9]*\\.[0-9]*[0-9]*[0-9]*\\.[0-9]*[0-9]*[0-9]*\\.[0-9]*[0-9]*[0-9]*/",$a,$match)){
$IP = substr($match[0],5);
}
unlink("a.txt");
コメント
コメントを投稿