在zend框架中获取用户IP地址

lol*_*ola 17 php zend-framework2

如何在Zend-framework 2中获取客户端的IP地址?在普通的PHP中它是$ _SERVER ['REMOTE_ADDR'],但也许是智能的Zend函数?

有任何想法吗?

Sto*_*mov 28

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

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

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

    // Getting specific variable
    $remoteAddr = $request->getServer('REMOTE_ADDR');
?>
Run Code Online (Sandbox Code Playgroud)

  • 我建议在$ _SERVER上使用Zend方法,因为它为测试提供了更大的灵活性 - 注入Zend请求对象要比在单元测试中修改全局变量容易得多. (5认同)
  • @Sam我不能同意你的意见.但这个网站的目的是回答人们的问题.这就是我们的工作.我们也提到了一个建议,这取决于要求问题决定做什么的建议. (4认同)
  • 没有采取 ;).我的建议遗失了,因为我不想建议不要使用它.实际上我建议使用它,因为`\ Zend\Stdlib\Parameters`是一个值对象,我总是鼓励使用值对象而不是数组.更容易测试,这个特殊的允许指定默认值...事实上我会在我的控制器中自己使用它,如果我需要:) (3认同)
  • 这种方法产生的开销只是不必要的.对于像获取远程地址这样的简单任务,使用`$ _SERVER`数组就更好了. (2认同)
  • 真正的观点包含,但我通常遵循用户不知道他们想要什么的原则,因此应该引导到正确的方向.IMO我的回答是缺少提到`getServer()`以及你的回答是缺少提到开销 - 没有难过的感觉:) (2认同)

rad*_*nan 28

您可以使用Zend\Http\PhpEnvironment\RemoteAddress该类来获取客户端IP地址.

$remote = new Zend\Http\PhpEnvironment\RemoteAddress;
echo $remote->getIpAddress();
Run Code Online (Sandbox Code Playgroud)

请参阅http://framework.zend.com/apidoc/2.1/classes/Zend.Http.PhpEnvironment.RemoteAddress.html.

注意:

为了使头的检查HTTP_X_FORWARDED_FOR,打开setUseProxy():

$remote->setUseProxy()->getIpAddress();
Run Code Online (Sandbox Code Playgroud)

  • 此类不仅查看REMOTE_ADDR,还可以选择检查代理IP,也可以选择过滤掉可信代理.如果您的服务器配置不能依赖于remote_addr,则一个对象的"开销"与增益相比无关紧要. (10认同)
  • 它确实查看REMOTE_ADDR,默认情况下禁用代理检查.但要知道这是一个很好的功能. (2认同)