Как определить IP-адрес сервера в PHP?
Как это для сервера ip:
$_SERVER['SERVER_ADDR'];
и это для порта
$_SERVER['SERVER_PORT'];
Если вы используете PHP версии 5.3 или выше, вы можете сделать следующее:
$host= gethostname(); $ip = gethostbyname($host);
Это хорошо работает, когда вы запускаете автономный скрипт, а не через веб-сервер.
например:
$_SERVER['SERVER_ADDR']
когда вы на IIS, попробуйте:
$_SERVER['LOCAL_ADDR']
Ни один из наиболее опрошенных ответов не будет надежно возвращать общедоступный адрес сервера. Обычно $_SERVER['SERVER_ADDR']
будет правильным, но если вы будете обращаться к серверу через VPN, скорее всего, он вернет внутренний сетевой адрес, а не общедоступный адрес, и даже если он не будет в той же сети, некоторые конфигурации будут просто быть пустым или иметь другое значение.
Аналогично, существуют сценарии, в которых $host= gethostname(); $ip = gethostbyname($host);
$host= gethostname(); $ip = gethostbyname($host);
не вернет правильные значения, потому что он использует оба DNS (внутренние или внешние записи) и настройки имени хоста сервера для экстраполяции IP-адреса сервера. Оба эти этапа потенциально являются неисправными. Например, если имя хоста сервера отформатировано как доменное имя (то есть HOSTNAME=yahoo.com
), то (по крайней мере, на моей настройке php5.4 / Centos6) gethostbyname
пропустит прямо, чтобы найти адрес Yahoo.com, а не локальный сервера.
Кроме того, поскольку gethostbyname
возвращается к общедоступным записям DNS, сервер тестирования с неопубликованными или неправильными общедоступными DNS-записями (например, вы получаете доступ к серверу по localhost
или IP-адресу или если вы перекрываете общедоступный DNS с помощью файла локальных hosts
) то вы вернетесь либо без IP-адреса (он просто вернет имя хоста), либо, что еще хуже, он вернет неправильный адрес, указанный в общедоступных записях DNS, если он существует или есть подстановочный знак для домена.
В зависимости от ситуации вы также можете попробовать третий подход, выполнив что-то вроде этого:
$external_ip = exec('curl http://ipecho.net/plain; echo');
У этого есть свои недостатки (зависит от конкретного стороннего сайта, и могут быть сетевые настройки, которые маршрутизируют исходящие соединения через другой хост или прокси), и, как и gethostbyname
это может быть медленным. Я честно не знаю, какой подход будет наиболее правильным, но урок, который следует принять близко к сердцу, заключается в том, что конкретные сценарии / конфигурации приведут к неправильным выводам для всех этих подходов … поэтому, если возможно, убедитесь, что подход, использование возвращает ожидаемые значения.
Проверьте массив $ _SERVER
echo $_SERVER['SERVER_ADDR'];
Предыдущие ответы дают $ _SERVER ['SERVER_ADDR']. Это не будет работать на некоторых установках IIS. Если вы хотите, чтобы это работало в IIS, используйте следующее:
$server_ip = gethostbyname($_SERVER['SERVER_NAME']);
Если вы используете PHP в оболочке bash, вы можете использовать:
$server_name=exec('hostname');
Поскольку $_SERVER[] SERVER_ADDR
, HTTP_HOST
и SERVER_NAME
не установлены.
Я просто создал простой скрипт, который вернет $ _SERVER ['REMOTE_ADDR'] и $ _SERVER ['SERVER_ADDR'] в IIS, поэтому вам не придется менять каждую переменную. Просто вставьте этот текст в свой php-файл, который включен в каждую страницу.
/** IIS IP Check **/ if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; } if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
Я пришел на эту страницу, ища способ получить свой собственный IP-адрес, а не один из удаленных компьютеров, подключающихся ко мне.
Это не будет работать для Windows-машины.
Но если кто-то ищет то, что я искал:
#! /usr/bin/php <?php $my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'"); echo $my_current_ip;
(Бесстыдно адаптирован из « Как я могу получить основной IP-адрес локального компьютера в Linux и OS X?» )
$serverIP = $_SERVER["SERVER_ADDR"]; echo "Server IP is: <b>{$serverIP}</b>";
Возможно, вам придется использовать $HTTP_SERVER_VARS['server_ADDR']
если вы не получаете ничего из ответов и если используете более старую версию PHP
Я нашел, что это работает для меня: GetHostByName ("");
Запуск XAMPP v1.7.1 на Windows 7 с веб-сервером Apache. К сожалению, это просто мой IP-адрес шлюза.
Это то, что вы могли бы использовать в качестве адаптации приведенных выше примеров, не беспокоясь о завитке, установленной на вашем сервере.
<?php // create a new cURL resource $ch = curl_init (); // set URL and other appropriate options curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); // grab URL and pass it to the browser $ip = curl_exec ($ch); echo "The public ip for this server is: $ip"; // close cURL resource, and free up system resources curl_close ($ch); ?>
Как это:
$_SERVER['SERVER_ADDR'];
Проверьте массив $ _SERVER
echo $_SERVER['SERVER_ADDR'];