CakePHP获取IP地址

时间:2011-04-15 10:16:28

标签: php cakephp ip-address

如何在CakePHP中获取客户端的IP地址?在普通的PHP中它是$_SERVER['REMOTE_ADDR']

我认为它就像所有$_SERVER变量一样,可以使用CakePHP中的env('VAR_NAME')getClientIP()来访问,但它不会返回相同的结果。

有什么想法吗?

6 个答案:

答案 0 :(得分:57)

CakePHP 1.x

RequestHandlerComponent::getClientIp();

所以澄清一下:

public $components = array(
    'RequestHandler'
);

然后在控制器方法中:

$this->RequestHandler->getClientIp();

CakePHP 2.x

RequestHandler::getClientIp()已被弃用;您可以从CakeRequest object获取客户端IP:

$this->request->clientIp();

答案 1 :(得分:12)

CakePHP 3.x用法:

//in controller
$ip = $this->request->clientIp();

CakePHP 2.x用法

//in controller
$this->request->ClientIp();

CakePHP 1.x用法

//in controller
RequestHandlerComponent::getClientIP();

答案 2 :(得分:2)

如果您需要从模型中获取IP地址,$this->request->getClientIp()无法正常工作,请执行以下操作:

  

错误:在非对象上调用成员函数clientIp()

改为使用Router::getRequest()->clientIp()

基本上,Router::getRequest()可以作为模型替换 Controller $this->request < / p>

答案 3 :(得分:2)

在cakephp 3.x中

在您的控制器中获取客户端ip-$ this-> request-> clientIp();

答案 4 :(得分:0)

Cakephp 3在ServerRequest类中具有clientIP功能:

  

https://github.com/cakephp/cakephp/blob/master/src/Http/ServerRequest.php#L578

您可以访问:

在控制器控制器中:

 $this->request->clientIp();

在控制器控制器中:

 // firts add Router support
 use Cake\Routing\Router;
 // Use in a method
 Router::getRequest()->clientIp()

如果您使用以前版本的框架或需要一些特殊行为,我将离开该函数:

public function clientIp()
{
    if ($this->trustProxy && $this->getEnv('HTTP_X_FORWARDED_FOR')) {
        $addresses = explode(',', $this->getEnv('HTTP_X_FORWARDED_FOR'));
        $ipaddr = end($addresses);
    } elseif ($this->trustProxy && $this->getEnv('HTTP_CLIENT_IP')) {
        $ipaddr = $this->getEnv('HTTP_CLIENT_IP');
    } else {
        $ipaddr = $this->getEnv('REMOTE_ADDR');
    }
    return trim($ipaddr);
}

例如,此函数返回值&#34; :: 1&#34;当你在当地环境中工作时。

最好将它添加到bootstrap.php启动文件中,因为您可以从任何地方访问它:

function clientIp($defaultIP = '127.0.0.1') {
        $ipaddr = null;
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ipaddr = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ipaddr = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ipaddr = $_SERVER['REMOTE_ADDR'];
        }
        $ipaddr = trim($ipaddr);
        if ($ipaddr == '::1') {
            $ipaddr = $defaultIP;
        }
        return $ipaddr;
}
祝你好运,编码愉快! = d

答案 5 :(得分:0)

您可以使用$this->request->clientIp();来获取当前访问者的IP地址。

Cake\Http\ServerRequest::clientIp()
Returns the current visitor’s IP address.

进一步参考 https://book.cakephp.org/3.0/en/controllers/request-response.html#reading-http-headers