Каков лучший способ получить 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-адрес!