如何在CakePHP中获取客户端的IP地址?在普通的PHP中它是$_SERVER['REMOTE_ADDR']
。
我认为它就像所有$_SERVER
变量一样,可以使用CakePHP中的env('VAR_NAME')
或getClientIP()
来访问,但它不会返回相同的结果。
有什么想法吗?
答案 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