Cakephp 3 имеет функцию clientIP в классе ServerRequest:
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