如何在Symfony2控制器中获取外部IP地址?

时间:2014-03-24 11:35:13

标签: php symfony ip-address

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'

3 个答案:

答案 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)