который является лучшим способом получить ip

Каков лучший способ получить IP-адрес в PHP:

getenv('REMOTE_ADDR'); 

или,

 $_SERVER['REMOTE_ADDR']; 

пожалуйста, скажите мне разницу, если таковые имеются, между ними.

getenv () может использоваться для доступа к любым переменным среды (PHP просто регистрирует REMOTE_ADDR как переменную среды для скрипта), тогда как при $ _SERVER вы, очевидно, получаете доступ только к содержимому супергеллона $ _SERVER.

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

$ _SERVER – это встроенная переменная PHP, а getenv () запрашивает среду (возможно, Apache / IIS) для значений.

Лучший способ получить IP-адрес;

 $ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); 

Но я сомневаюсь, что между этими двумя переменными есть разница … Хм.

Вероятно, было бы лучше использовать $ _SERVER ['REMOTE_ADDR']; для предотвращения несовместимости между серверами.

Между вызовами нет никаких различий. Как вы видите, PHP-руководство использует оба метода в том же примере. Есть случаи, когда у вас нет глобальных переменных, таких как $ _SERVER, и вы вынуждены использовать getenv (). По моему опыту я никогда не видел, чтобы сервер с глобальными переменными был отключен.

С помощью $_SERVER['REMOTE_ADDR'] вы читаете непосредственно глобальную переменную, обращаясь к массиву $ _SERVER [], который настроен при возникновении удаленного запроса:

$ _SERVER – это массив, содержащий информацию, такую ​​как заголовки, пути и места расположения сценариев. Записи в этом массиве создаются веб-сервером. Нет никакой гарантии, что каждый веб-сервер предоставит любой из них; серверы могут опускать некоторые или предоставлять другим, не перечисленным здесь. Тем не менее, большое количество этих переменных учитывается в спецификации «CGI 1.1», поэтому вы сможете их ожидать.

Функция getenv () получает доступ к любой переменной среды, чтобы получить соответствующее значение!

В обоих случаях вы получаете одно и то же значение и одну и ту же переменную … но $ _SERVER – это сборка в суперглобальной переменной PHP, а getenv () получает значение переменной, определенной в текущей среде!

Я думаю, что в этом случае использование суперглобальной переменной – лучший способ получить IP-адрес!