与https://stackoverflow.com/a/9029790/1069375类似
获取Web服务器的外部/公共IP地址的Symfony2(内置?)方式是什么?
EG。有什么接近这个吗?
$this->container->get('request')->getClientIp(); // returns string '::1' (length=3)
请注意
我在NAT防火墙后面的localhost上编码和测试。我不希望“127.0.0.1”作为答案,但无论网络访问者会想到网关都应该将www端口转发到我的开发服务器。我已经使用动态DNS主机名,以防我不得不求助于它,但更喜欢更便携的方法。
为了避免在评论中偏离主题:
$_SERVER['REMOTE_ADDR'] // also returns '::1'
答案 0 :(得分:2)
你有两种可能性。 第一个是简单的,问一些第三方服务器:
$externalContent = file_get_contents('http://checkip.dyndns.com/');
preg_match('/Current IP Address: ([\[\]:.[0-9a-fA-F]+)</', $externalContent, $m);
$externalIp = $m[1];
另一个是解析你的服务器配置,如:
/sbin/ifconfig |grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
你可以使用shell_exec
从php调用它答案 1 :(得分:1)
你说你有一个动态主机名。使用PHP内置函数:
$serverIp = gethostbyname('your_subdomain.dyndns.org');
这应该从您本地配置的DNS中读取您的外部IP地址。
更新
正确配置的服务器包含以下信息中的正确信息:
echo $_SERVER['SERVER_ADDR'];
echo $_SERVER['SERVER_NAME'];
答案 2 :(得分:0)
我讨厌回答我自己的问题,并且很乐意标记一个更好的答案(简短而优雅,独立于外部服务器,不像下面,可能使用网络堆栈,traceroute或一些这样的魔法),但是现在这个任务这个我们需要快速进行分期或生产,所以:
$CustomerIp = system("curl -s ipv4.icanhazip.com") ; // returns string '93.9.29.389' (length=11)