Я пытаюсь отслеживать IP-адреса посетителей. При использовании $_SERVER["REMOTE_ADDR"]
я получаю IP-адрес сервера, а не посетителя. Я попробовал это на нескольких компьютерах в разных местах, и все они привели к тому же самому IP. Есть ли некоторые настройки PHP/сервера, которые могут повлиять на это?
$ _SERVER [ "REMOTE_ADDR" ] указывает IP-адрес сервера, а не IP-адрес посетителя
Ответ 1
REMOTE_ADDR
нельзя доверять.
Во всяком случае, попробуйте
$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}
Изменить: Кроме того, включен ли на вашем сервере маршрутизатор переадресация портов? Возможно, что он возится с пакетами.
Ответ 2
При использовании $_SERVER [ "REMOTE_ADDR" ] я получаю IP-адрес сервера, а не посетителя.
Тогда что-то не так, или странно, с вашей конфигурацией.
-
Используете ли вы какой-то обратный прокси? В этом случае предложение @simshaun может работать.
-
У вас есть что-то еще необычное в конфигурации вашего веб-сервера?
-
Можете ли вы показать код PHP, который используете?
-
Можете ли вы показать, как выглядит адрес. Является ли это локальным или интернет-адресом?
Ответ 3
$_SERVER['REMOTE_ADDR']
дает IP-адрес, с которого запрос был отправлен на веб-сервер. Обычно это адрес посетителя, но в вашем случае это звучит так, будто есть какой-то прокси-сервер, расположенный прямо перед веб-сервером, который перехватывает запросы, поэтому на веб-сервер он выглядит так, как будто запросы происходят оттуда.
Ответ 4
Не смотрите на IP-адреса, которые не заданы в ожидаемом заголовке. Просто выполните следующие действия, чтобы проверить все переменные сервера и выяснить, какой из них подходит для вашего случая:
print_r($_SERVER);
Ответ 5
Замена:
$_SERVER["REMOTE_ADDR"];
С
$_SERVER["HTTP_X_REAL_IP"];
Работал для меня.