如何在CakePHP中获取客户端IP地址?在普通的PHP中,可以使用$_SERVER['REMOTE_ADDR']
。
我以为像所有的$_SERVER
变量一样,可以使用env('VAR_NAME')
或getClientIP()
来访问它,但它并不能返回相同的结果。
有什么想法吗?
如何在CakePHP中获取客户端IP地址?在普通的PHP中,可以使用$_SERVER['REMOTE_ADDR']
。
我以为像所有的$_SERVER
变量一样,可以使用env('VAR_NAME')
或getClientIP()
来访问它,但它并不能返回相同的结果。
有什么想法吗?
CakePHP 1.x:
RequestHandlerComponent::getClientIp();
因此,澄清一下:
public $components = array(
'RequestHandler'
);
然后在控制器方法中:
$this->RequestHandler->getClientIp();
CakePHP 2.x & CakepPHP 3.x:
RequestHandler::getClientIp()
已过时,你可以从CakeRequest
对象中获取客户端IP:
$this->request->clientIp();
//in controller
$ip = $this->request->clientIp();
CakePHP 2.x使用//in controller
$this->request->ClientIp();
CakePHP 1.x的用法
//in controller
RequestHandlerComponent::getClientIP();
$ServerRequest = new \Cake\Http\ServerRequest();
然后 $entity->remote_addr = $ServerRequest->clientIp();
。 - ᴍᴇʜᴏᴠ在CakePHP 3.x中,
要获取客户端IP地址,请在您的控制器中使用以下代码:$this->request->clientIp();
$this->request->getClientIp()
将不起作用,并抛出以下错误:
请改用错误:在非对象上调用成员函数clientIp()
Router::getRequest()->clientIp()
。Router::getRequest()
可以作为控制器中$this->request
的模型替代。$this->request->clientIp();
获取当前访问者的IP地址。Cake\Http\ServerRequest::clientIp()
Returns the current visitor’s IP address.
供参考 https://book.cakephp.org/3.0/zh-cn/controllers/request-response.html#reading-http-headers
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);
}
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
$_SERVER['REMOTE_ADDR'];
做得更多。 - rich97getClientIp(false)
,有时(例如在Heroku上)IP位于HTTP_X_FORWARDED_FOR中。 - Brad Koch$this->request->clientIp()
。 - mrdaliri