Почему getenv ('REMOTE_ADDR') дает мне пустой IP-адрес?
-
05-07-2019 - |
Вопрос
Этот код PHP ...
207 if (getenv(HTTP_X_FORWARDED_FOR)) {
208 $ip = getenv('HTTP_X_FORWARD_FOR');
209 $host = gethostbyaddr($ip);
210 } else {
211 $ip = getenv('REMOTE_ADDR');
212 $host = gethostbyaddr($ip);
213 }
Выдает это предупреждение ...
Предупреждение. gethostbyaddr () [function.gethostbyaddr]: Адрес не в формате a.b.c.d в C: \ inetpub ... \ filename.php в строке 212
Похоже, что $ ip пусто.
Решение
на php.net написано следующее:
Функция
getenv
не работает, если ваш серверный API является ASAPI (IIS). Поэтому старайтесь не использоватьgetenv ('REMOTE_ADDR')
, а$ _ SERVER [" REMOTE_ADDR "]
.
Возможно, вы пытались сделать это с помощью $ _ SERVER
?
Другие советы
Почему бы вам не использовать
Почему бы вам не использовать
Почему бы вам не использовать
Почему бы вам не использовать
<*>
и
<*>SERVER['REMOTE_ADDR']
и
<*>SERVER['HTTP_X_FORWARDED_FOR']
и
<*>SERVER['REMOTE_ADDR']
и
<*>Лучшее решение уже было дано. Но все же:
getenv('HTTP_X_FORWARD_FOR');
должно быть
getenv('HTTP_X_FORWARDED_FOR');
Да ... иногда на компьютерах нужны строки, которые они понимают; -)
Прежде всего, getenv () принимает строку в качестве параметра. В строке 207 вы должны использовать:
getenv('HTTP_X_FORWARDED_FOR')
... вместо:
getenv(HTTP_X_FORWARDED_FOR)
Во-вторых, доступ к этим переменным через $ _SERVER является более надежным решением, поскольку getenv () имеет тенденцию отображать различное поведение на разных платформах.
Кроме того, эти переменные, вероятно, не будут работать, если вы запускаете этот скрипт через CLI.
Попробуйте var_dump ($ ip); и посмотрите, что содержит переменная.