Как-то $_SERVER['REMOTE_ADDR']
возвращает пустую строку, у меня такой же код (как часть скрипта), запущенный на нескольких серверах, и он работает повсюду, они все одинаковы.
Странно, когда я перезапускаю apache и загружаю страницу, он работает ровно один раз, если я перезагружаю сайт + все время после этого, он пуст. У меня были другие попытки, одинаковый результат, пустой.
кто-то предположил, что это что-то с конфигурацией IPv6, теперь я полностью отключил IPv6, но проблема не устранена.
если вы за прокси-сервером, вы можете использовать $_SERVER['HTTP_X_FORWARDED_FOR']
или $_SERVER['HTTP_CLIENT_IP']
вместо $_SERVER['REMOTE_ADDR']
. это зависит от того, как настроен ваш прокси.
Да, REMOTE_ADDR может быть пустым. поэтому, если вы хотите, вы можете использовать этот код, который я использую для получения ip на основе HTTP_X_FORWARDED_FOR
<?php if(! empty($_SERVER['REMOTE_ADDR']) ){ $ip = $_SERVER['REMOTE_ADDR']; } else{ $ip = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : $_SERVER['HTTP_X_FORWARDED_FOR']; }
Я сначала проверяю REMOTE_ADDR, поскольку он более надежный, а иногда HTTP_X_FORWARDED_FOR может быть подделан пользователями
У меня был код на новой виртуальной машине, которая выглядела так. Он вызывается из файла javascript:
<?php $hostip = $_SERVER['REMOTE_ADDR']; ?> var myip = "<?=$hostip ?>";
Конечно, работал на старом сервере, и я некоторое время царапал себе голову, думая, что с Apache что-то не так. Там отсутствует модуль? Какой-то непонятный параметр Apache я не могу найти ?. Я думал, что Apache не отправляет серверные переменные. Это было до тех пор, пока я не попробовал простой способ, и это сработало:
echo $_SERVER['REMOTE_ADDR'];
Оказалось, что мне нужно было отредактировать php.ini и установить short_open_tag в On . Facepalm – ярлыки php ярлыков не работали. Надеюсь, это поможет спасти кого-то еще главу времени 🙂
Может быть, это поможет. Я вызывал php-скрипт из приложения iPhone для обновления базы данных, содержащей IP-адрес. IP-это новое поле, добавленное всего несколько дней назад, и оно не обновлялось с iPhone, но работало корректно с Android. Проблема в том, что новый скрипт php не использовался iPhone до тех пор, пока телефон не был выключен и не перезагружен. Он сохранил его в кеше.
Кто-нибудь знает, как очистить эти старые php-файлы?