Почему getenv ('REMOTE_ADDR') дает мне пустой IP-адрес?

StackOverflow https://stackoverflow.com/questions/174393

  •  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); и посмотрите, что содержит переменная.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top