我試圖讓這個:46-121-31-23.example.net
PHP解析主機+ IP到IP地址的唯一
被解析到這一點:46.121.31.23
更換連字符和使用正則表達式是不夠的刪除角色,因爲這樣的結果將是46.121.31.23..
我試圖讓這個:46-121-31-23.example.net
PHP解析主機+ IP到IP地址的唯一
被解析到這一點:46.121.31.23
更換連字符和使用正則表達式是不夠的刪除角色,因爲這樣的結果將是46.121.31.23..
gethostbyname()
怎麼樣?雖然您的特定主機名將IPv4地址編碼爲其「友好」名稱,但不能保證永遠是真實的。因此,使用真實的名稱 - > IP查詢系統:DNS
$ip = gethostbyname('46-121-31-23.example.net');
echo $ip; // 46.121.31.23
評論隨訪:該主機名顯然不存在:
[email protected]:~$ host -t ns static.012.net.il
static.012.net.il name server pdns.goldenlines.net.il.
static.012.net.il name server sdns.goldenlines.net.il.
[email protected]:~$ host 46-121-31-23.static.012.net.il pdns.goldenlines.net.il
Using domain server:
Name: pdns.goldenlines.net.il
Address: 212.117.129.3#53
Aliases:
Host 46-121-31-23.static.012.net.il not found: 3(NXDOMAIN)
因此沒有辦法做一個DNS查找,因爲那個域的權威服務器不知道你在說什麼。
然而,反向映射(IP->主機名)DOES工作:
[email protected]:~$ host 46.121.31.23
23.31.121.46.in-addr.arpa domain name pointer 46-121-31-23.static.012.net.il.
所以,出於某種原因,該提供的只是做反向映射,而不是向前。
出於某種原因,不適用於'gethostbyname('46 -121-31-23.static.012.net.il')'。 – Lior 2012-01-27 22:24:28
@Lior:見編輯 – 2012-01-28 02:45:35
是這樣的嗎?
$ip = preg_replace("/\..*/", "", $ip);
$ip = str_replace("-", ".", $ip);
雖然,我同意@klaustopher,使用gethostbyname
一般是安全的:(http://php.net/manual/en/function.gethostbyname.php)。
編輯:
此外,您還可以嘗試做這種方式:Get IP from DNS without using gethostbyname?
if (preg_match('/(\d{1,3})-(\d{1,3})-(\d{1,3})-(\d{1,3})/', $hostname, $ip)) {
$ip = "{$ip[1]}.{$ip[2]}.{$ip[3]}.{$ip[4]}";
}
應該工作。
把所有東西都拿出來,直到'。'然後用'.'代替'-' – ManseUK 2012-01-27 22:10:08
不是每一個provier都給你這種形式的主機。獲得IP地址的最佳機會是使用'gethostbyname($ yourHost)' – klaustopher 2012-01-27 22:11:55
這不是HOST + IP,它只是HOST。你的問題不是很確切。 – hakre 2012-01-28 12:32:21