Помимо очевидного (localhost, 127.0.0.1), у PHP (интерфейс командной строки!) Есть механизм для обнаружения IP-адреса компьютера, на котором работает скрипт?
$_SERVER[*]
не будет работать, поскольку это не веб-приложение – это сценарий командной строки.
ТИА
Вы можете получить имя хоста, используя gethostname
попробуйте это, он должен вернуть ip-адрес сервера
$host= gethostname(); $ip = gethostbyname($host);
Если вы работаете с PHP <5.3, это может помочь (в системах на основе NIX по крайней мере):
mscharley@S04:~$ 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); mscharley@S04:~$ ./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" } mscharley@S04:~$
Или, если вы не ожидаете часто делать это, возможно, это сработает (просто не злоупотребляйте им):
$ip = file_get_contents('http://whatismyip.org/');
Я знаю, что это довольно старый вопрос, но, похоже, нет окончательного ответа (насколько это возможно). Мне нужно было определить это значение как на * NIX-блоках, так и на Win X коробки. Также из сценария выполненного CLI, а также скрипта, отличного от CLI. Следующей функцией является лучшее, что я придумал, которое заимствует разные концепции, о которых люди говорили за эти годы. Возможно, это может быть полезно:
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]; } } }
Если все остальное не удается, вы всегда можете выполнить ipconfig или ifconfig, в зависимости от вашей платформы, и проанализировать результат.