Подтвердить что ты не робот

Как найти IP-адрес сервера в PHP (CLI)

Помимо очевидного (localhost, 127.0.0.1), у PHP (интерфейс командной строки!) есть механизм для обнаружения IP-адреса компьютера, на котором работает script?

$_SERVER[*] не будет работать, поскольку это не веб-приложение - это командная строка script.

ТИА

4b9b3361

Ответ 1

Вы можете получить имя хоста, используя gethostname

Ответ 2

попробуйте это, он должен вернуть ip-адрес сервера

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

Ответ 3

Если вы работаете с PHP < 5.3, это может помочь (в системах на основе NIX по крайней мере):

 [email protected]:~$ cat test.php
#!/usr/bin/env php
<?php

function getIPs($withV6 = true) {
    preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips);
    return $ips[1];
}

$ips = getIPs();
var_dump($ips);

 [email protected]:~$ ./test.php
array(5) {
  [0]=>
  string(13) "72.67.113.141"
  [1]=>
  string(27) "fe80::21c:c0ff:fe4a:d09d/64"
  [2]=>
  string(13) "72.67.113.140"
  [3]=>
  string(9) "127.0.0.1"
  [4]=>
  string(7) "::1/128"
}
 [email protected]:~$

Или, если вы не ожидаете делать это часто, тогда, возможно, это сработает (просто не злоупотребляйте им):

$ip = file_get_contents('http://whatismyip.org/');

Ответ 4

Я знаю, что это довольно старый вопрос, но, похоже, нет окончательного ответа (насколько это возможно). Мне нужно было определить это значение как на * NIX-боксах, так и на на коробках Win X. Также из CLI, выполненного script, а также не CLI script. Следующей функцией является лучшее, что я придумал, которое заимствует разные концепции, о которых люди говорили за эти годы. Возможно, это может быть полезно:

function getServerAddress() {
    if(isset($_SERVER["SERVER_ADDR"]))
    return $_SERVER["SERVER_ADDR"];
    else {
    // Running CLI
    if(stristr(PHP_OS, 'WIN')) {
        //  Rather hacky way to handle windows servers
        exec('ipconfig /all', $catch);
        foreach($catch as $line) {
        if(eregi('IP Address', $line)) {
            // Have seen exec return "multi-line" content, so another hack.
            if(count($lineCount = split(':', $line)) == 1) {
            list($t, $ip) = split(':', $line);
            $ip = trim($ip);
            } else {
            $parts = explode('IP Address', $line);
            $parts = explode('Subnet Mask', $parts[1]);
            $parts = explode(': ', $parts[0]);
            $ip = trim($parts[1]);
            }
            if(ip2long($ip > 0)) {
            echo 'IP is '.$ip."\n";
            return $ip;
            } else
            ; // TODO: Handle this failure condition.
        }
        }
    } else {
        $ifconfig = shell_exec('/sbin/ifconfig eth0');
        preg_match('/addr:([\d\.]+)/', $ifconfig, $match);
        return $match[1];
    }
    }
}

Ответ 5

Если все остальное не удается, вы всегда можете exec ipconfig или ifconfig, в зависимости от вашей платформы, и проанализировать результат.