2012-01-27 88 views
3

我試圖讓這個:46-121-31-23.example.netPHP解析主機+ IP到IP地址的唯一

被解析到這一點:46.121.31.23

更換連字符和使用正則表達式是不夠的刪除角色,因爲這樣的結果將是46.121.31.23..

+2

把所有東西都拿出來,直到'。'然後用'.'代替'-' – ManseUK 2012-01-27 22:10:08

+4

不是每一個provier都給你這種形式的主機。獲得IP地址的最佳機會是使用'gethostbyname($ yourHost)' – klaustopher 2012-01-27 22:11:55

+0

這不是HOST + IP,它只是HOST。你的問題不是很確切。 – hakre 2012-01-28 12:32:21

回答

5

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. 

所以,出於某種原因,該提供的只是做反向映射,而不是向前。

+1

出於某種原因,不適用於'gethostbyname('46 -121-31-23.static.012.net.il')'。 – Lior 2012-01-27 22:24:28

+0

@Lior:見編輯 – 2012-01-28 02:45:35

1
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]}"; 
} 

應該工作。