[英]CakePHP Get IP Address
我如何在 CakePHP 中獲取客戶端的 IP 地址? 在普通的 PHP 中它是$_SERVER['REMOTE_ADDR']
。
我認為它就像所有$_SERVER
變量一樣,可以使用env('VAR_NAME')
或 CakePHP 中的getClientIP()
,但它不會返回相同的結果。
有任何想法嗎?
蛋糕PHP 1.x :
RequestHandlerComponent::getClientIp();
所以要澄清:
public $components = array(
'RequestHandler'
);
然后在控制器方法中:
$this->RequestHandler->getClientIp();
CakePHP 2.x 和 CakepPHP 3.x :
RequestHandler::getClientIp()
已棄用; 您可以從CakeRequest
對象獲取客戶端 IP:
$this->request->clientIp();
CakePHP 3.x 用法:
//in controller
$ip = $this->request->clientIp();
CakePHP 2.x 使用
//in controller
$this->request->ClientIp();
CakePHP 1.x 使用
//in controller
RequestHandlerComponent::getClientIP();
如果您需要從模型中獲取 IP 地址, $this->request->getClientIp()
將不起作用,拋出:
錯誤:在非對象上調用成員函數 clientIp()
使用Router::getRequest()->clientIp()
代替。
所以基本上, Router::getRequest()
可以作為Model替代Controller的$this->request
在 cakephp 3.x 中
在您的控制器中獲取客戶端 ip - $this->request->clientIp();
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);
}
例如,當您在本地環境中工作時,此函數返回值“:: 1”。
將它添加到 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
您可以使用$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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.