Почему getenv ('REMOTE_ADDR') дает мне пустой IP-адрес? - PullRequest
0 голосов
/ 06 октября 2008

Этот код 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]: Адрес не в форме .b.c.d в C: \ inetpub ... \ filename.php в строке 212

Кажется, что $ ip пусто.

Ответы [ 4 ]

11 голосов
/ 06 октября 2008

на php.net написано следующее:

Функция getenv не работает, если API вашего сервера ASAPI (IIS). Поэтому старайтесь не использовать getenv('REMOTE_ADDR'), а $_SERVER["REMOTE_ADDR"].

Возможно, вы пытались сделать это с $_SERVER?

4 голосов
/ 06 октября 2008

Почему бы вам не использовать

$_SERVER['REMOTE_ADDR'] 

и

$_SERVER['HTTP_X_FORWARDED_FOR']
2 голосов
/ 28 сентября 2010

Лучшее решение уже было дано. Но все же:

getenv('HTTP_X_FORWARD_FOR');

должно быть

getenv('HTTP_X_FORWARDED_FOR');

Да ... иногда компьютеры хотят иметь строки, которые они понимают;

1 голос
/ 06 октября 2008

Прежде всего, getenv () принимает строку в качестве параметра. В строке 207 вы должны использовать:

getenv('HTTP_X_FORWARDED_FOR')

... вместо:

getenv(HTTP_X_FORWARDED_FOR)

Во-вторых, доступ к этим переменным через $ _SERVER является более надежным решением, поскольку getenv () имеет тенденцию отображать различное поведение на разных платформах.

Кроме того, эти переменные, вероятно, не будут работать, если вы запускаете этот скрипт через CLI.

Попробуйте var_dump ($ ip); и посмотрите, что содержит переменная.

...