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