簡體   English   中英

CakePHP 獲取 IP 地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM