除了顯而易見的(localhost,127.0.0.1)之外,PHP(命令行界面!)還有一種用於發現運行腳本的計算機的IP的機制?如何在PHP(CLI)中查找我的服務器的IP地址
$_SERVER[*]
將不起作用,因爲這不是一個Web應用程序 - 這是一個命令行腳本。
TIA
除了顯而易見的(localhost,127.0.0.1)之外,PHP(命令行界面!)還有一種用於發現運行腳本的計算機的IP的機制?如何在PHP(CLI)中查找我的服務器的IP地址
$_SERVER[*]
將不起作用,因爲這不是一個Web應用程序 - 這是一個命令行腳本。
TIA
您可以通過使用gethostname
如果一切都失敗了,你總是可以exec IPCONFIG或使用ifconfig,根據您的平臺,並解析結果。
如果我沒有運行5.3,我會回落在這樣的一個操作系統級解決方案的服務器的IP地址。謝謝! – ChronoFish 2009-11-29 04:39:30
不知道如何可靠,但你可以跳過exec()並使用php_uname('n')來拉動主機名傳遞給getHostByName() – joshtronic 2011-03-31 01:45:00
得到的主機名。如果您正在使用PHP < 5.3工作,這可能會幫助(在* NIX的系統ATLEAST):
[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/');
謝謝 - 我喜歡你的Linux/Unix解決方案,但對於這個應用程序,我在Windows上運行...(是的,我知道... Windows上的PHP CLI ?!)。網絡服務很好理解 - 當我需要「防火牆IP之外」時,我必須記住它。 – ChronoFish 2009-11-29 04:44:20
我知道這是一個相當古老的問題,但似乎不是T o是一個明確的答案(儘可能多)。我需要在* 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];
}
}
}
試試這個,它應該返回
$host= gethostname();
$ip = gethostbyname($host);
SHOW 192.168.1.1 :) – user956584 2012-03-24 16:31:35
作品!謝謝! – Oniz 2013-08-09 09:41:39
它不適用於我:127.0.1.1 ... – Besnik 2013-09-19 10:08:53
謝謝 - 這很好:我的解決方案是:getHostByName(getHostName()) ; – ChronoFish 2009-11-29 04:35:20
這是一個5.3解決方案 - 但幸運的是我正在運行5.3 – ChronoFish 2009-11-29 04:36:07
在頁面底部有<5.3的評論。 – 2009-11-30 04:08:57