Как определить IP-адрес сервера в PHP

Как определить IP-адрес сервера в PHP?

Ответ 1

Как и для сервера ip:

$_SERVER['SERVER_ADDR'];

а для порта

$_SERVER['SERVER_PORT'];

Ответ 2

Если вы используете PHP версии 5.3 или выше, вы можете сделать следующее:

$host= gethostname();
$ip = gethostbyname($host);

Это хорошо работает, когда вы запускаете автономный script, а не через веб-сервер.

Ответ 3

например:

$_SERVER['SERVER_ADDR']

когда вы на IIS, попробуйте:

$_SERVER['LOCAL_ADDR']

Ответ 4

Ни один из наиболее опрошенных ответов не будет надежно возвращать общедоступный адрес сервера. Обычно $_SERVER['SERVER_ADDR'] будет правильным, но если вы будете обращаться к серверу через VPN, скорее всего, он вернет внутренний сетевой адрес, а не общедоступный адрес, и даже если он не в той же сети, некоторые конфигурации будут просто пустыми или будут другое значение.

Аналогичным образом существуют сценарии, в которых $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 он может быть медленным. Я честно не знаю, какой подход будет наиболее правильным, но урок, который следует принять близко к сердцу, заключается в том, что конкретные сценарии/конфигурации приведут к неправильным выводам для всех этих подходов... поэтому, если возможно, убедитесь, что подход, использование возвращает ожидаемые значения.

Ответ 5

Проверьте $_ SERVER массив

echo $_SERVER['SERVER_ADDR'];

Ответ 6

Предыдущие ответы дают $_SERVER ['SERVER_ADDR']. Это не будет работать на некоторых установках IIS. Если вы хотите, чтобы это работало в IIS, используйте следующее:

$server_ip = gethostbyname($_SERVER['SERVER_NAME']);

Ответ 7

Если вы используете PHP в оболочке bash, вы можете использовать:

$server_name=exec('hostname');

Потому что $_SERVER[] SERVER_ADDR, HTTP_HOST и SERVER_NAME не установлены.

Ответ 8

Я только что создал простой script, который вернет $_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']; }

Ответ 9

Я пришел на эту страницу, ища способ получить свой собственный 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?)

Ответ 10

$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";

Ответ 11

Возможно, вам придется использовать $HTTP_SERVER_VARS['server_ADDR'], если вы не получаете ничего из ответов и если используете более старую версию PHP

Ответ 12

Я нашел, что это работает для меня: GetHostByName ( "");

Запуск XAMPP v1.7.1 на Windows 7 с веб-сервером Apache. К сожалению, он просто дает мой IP-адрес шлюза.

Ответ 13

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

<?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);
    ?>

Ответ 14

Вот так:

$_SERVER['SERVER_ADDR'];

Ответ 15

Проверьте массив $_SERVER

echo $_SERVER['SERVER_ADDR'];