Php 在zend框架中获取用户ip地址

Php 在zend框架中获取用户ip地址,php,zend-framework2,Php,Zend Framework2,如何在Zend framework 2中获取客户端的IP地址?在普通PHP中应该是$\u SERVER['REMOTE\u ADDR'],但可能是smart Zend函数 有什么想法吗?大秘密: $_SERVER['REMOTE_ADDR'] 不要重新发明已经很简单的东西 ZF2中的请求对象具有名为getServer的方法。此方法返回一个实现\Zend\Stdlib\ParametersInterface的对象。使用此特定对象,您可以从$\u服务器变量中获取任何内容 以下是如何使用方法和对象的

如何在Zend framework 2中获取客户端的IP地址?在普通PHP中应该是$\u SERVER['REMOTE\u ADDR'],但可能是smart Zend函数

有什么想法吗?

大秘密:

$_SERVER['REMOTE_ADDR']
不要重新发明已经很简单的东西

ZF2中的请求对象具有名为
getServer
的方法。此方法返回一个实现
\Zend\Stdlib\ParametersInterface
的对象。使用此特定对象,您可以从$\u服务器变量中获取任何内容

以下是如何使用方法和对象的两个示例:

<?php 
    // Getting the entire params object
    $servParam = $request->getServer();
    $remoteAddr = $servParam->get('REMOTE_ADDR');

    // Getting specific variable
    $remoteAddr = $request->getServer('REMOTE_ADDR');
?>

您可以使用
Zend\Http\PhpEnvironment\RemoteAddress
类获取客户端ip地址

$remote = new Zend\Http\PhpEnvironment\RemoteAddress;
echo $remote->getIpAddress();

注意:

要启用对的标题
HTTP\u X\u FORWARDED\u的检查,请启用
setUseProxy()


这种方法产生的开销完全是不必要的。对于像获取远程地址这样的简单任务,使用
$\u服务器
数组就更好了。@Sam我完全同意你的看法。但这个网站的目的是回答人们的问题。这就是我们所做的。我们也提到了一个建议,这取决于提出问题的人来决定做什么。真正的观点包含在内,但我通常遵循的原则是,用户不知道他们想要什么,因此应该被引导到正确的方向。在我看来,我的答案没有提到
getServer()
,你的答案也没有提到开销-没有不愉快的感觉:)没有被采纳;)。我的建议不见了,因为我不想建议不要使用它。事实上,我建议使用它,因为
\Zend\Stdlib\Parameters
是一个值对象,我总是鼓励使用值对象而不是数组。更容易测试,这个特殊的允许指定默认值。。。事实上,如果需要的话,我会在我的控制器中使用它:)我建议在$\u服务器上使用Zend方法,因为它为测试提供了更大的灵活性-注入Zend请求对象比在单元测试中修改全局变量要容易得多。这种方法产生的开销是不必要的。对于仅获取远程地址这样的简单任务,使用
$\u服务器
数组就更好了。此类不仅查看远程地址,还可以检查代理ip,还可以筛选出受信任的代理。如果您的服务器配置无法依赖remote\u addr,则一个对象的“开销”与收益相比是微不足道的。它会查看remote\u addr,并且默认情况下禁用代理检查。但这是一个很好的特性。问题是,
$\u服务器['REMOTE\u ADDR']
并不总是可靠的。如果用户在一个代理后面,IP显示为
HTTP\u X\u FORWARDED\u FOR
头,该怎么办?不要那么快就屈尊俯就。如果你听了用户的问题,也许你永远不会问这个问题。:)@rafaelphp如果你检查这个问题的日期,你也不会发表这样愚蠢的评论。我之所以不删除我的答案,是因为你上面的那个家伙有一个很好的评论,有很多投票。每个人有时都是错的——这是我给了一个糟糕答案的少数几次之一。承认这一点并不羞耻,这就是为什么它没有被删除。放松点,伙计!这只是一个评论!
$remote->setUseProxy()->getIpAddress();