В метрику можно передавать любые пользовательские параметры, например IP адрес.
Кажется в первом способе будет неправильно определяться адрес клиента за прокси. Можно попробовать так, но тоже без 100% гарантии
public function getUserHostAddress(){ if (!empty($_SERVER['HTTP_X_REAL_IP'])) { $ip=$_SERVER['HTTP_X_REAL_IP']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; }
Первый способ самый распространенный я не стал его особо описывать. Но да, вы правы, если за proxy, например если на серваке связка apache+nginx то тут без HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR не обойтись для определения реального IP адреса.
Кажется в первом способе будет неправильно определяться адрес клиента за прокси. Можно попробовать так, но тоже без 100% гарантии
public function getUserHostAddress(){
if (!empty($_SERVER['HTTP_X_REAL_IP']))
{
$ip=$_SERVER['HTTP_X_REAL_IP'];
}
elseif (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Первый способ самый распространенный я не стал его особо описывать. Но да, вы правы, если за proxy, например если на серваке связка apache+nginx то тут без HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR не обойтись для определения реального IP адреса.