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

Этот код 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    }

Выдает это предупреждение ...

Warning: gethostbyaddr() [function.gethostbyaddr]: Address is not in a.b.c.d form in C:\inetpub...\filename.php on line 212

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
7 665
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

$_SERVER['REMOTE_ADDR'] 

и

$_SERVER['HTTP_X_FORWARDED_FOR']
Ответ принят как подходящий

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

The function getenv does not work if your Server API is ASAPI (IIS). So, try to don't use getenv('REMOTE_ADDR'), but $_SERVER["REMOTE_ADDR"].

А может с $_SERVER пробовали сделать?

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

getenv('HTTP_X_FORWARDED_FOR')

...вместо:

getenv(HTTP_X_FORWARDED_FOR)

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

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

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

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

getenv('HTTP_X_FORWARD_FOR');

должно быть

getenv('HTTP_X_FORWARDED_FOR');

Да ... иногда компьютерам нужны понятные им строки ;-)

Другие вопросы по теме