Хочу сделать небольшой опросник, в котором для уникальности каждого конкретного пользователя, используется его локальный ip-адрес. Сайт находится на локальном веб-сервере (OpenServer). Когда пытаюсь получить ip-адрес клиента (пользователя), всегда выводит 127.0.0.1, хотя адрес моего пк совсем другой. Я понимаю, что Request::ip() прекрасно заработал бы, если сайт лежал на каком-нибудь хостинге, но как быть в моем случае? Можно ли как то выделить уникальность каждого локального пользователя? Всем большое спасибо за ответы!
Вы можете использовать любую из следующих двух функций.
Обе функции эквивалентны разнице только в том, как и откуда извлекаются значения.
Первый getenv()
используется для получения значений из переменных среды PHP
, а второй - $ _SERVER
используется для получения значений с веб-сервера (например - apache
).
Вариант с использованием getenv()
.
function get_client_ip_env() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
Вариант второй с использованием $ _SERVER
.
function get_client_ip_server() {
$ipaddress = '';
if ($_SERVER['HTTP_CLIENT_IP'])
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if($_SERVER['HTTP_X_FORWARDED'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if($_SERVER['HTTP_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if($_SERVER['HTTP_FORWARDED'])
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if($_SERVER['REMOTE_ADDR'])
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
Примечание. HTTP_X_FORWARDED_FOR
иногда возвращает внутренний или локальный IP-адрес, что обычно не полезно. Кроме того, он будет возвращать список, разделенный запятыми, если он был переадресован из нескольких IP-адресов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть ссылка на сайт, перейдя по которой на сайте выполняется определенное действиеНа этот сайт открыт доступ только некоторым ip (моему серверу)...