2010-09-30 65 views
2

我目前有一個這樣的系統:PHP - 域到IP

插入IP,它會將IP張貼到另一個.php頁面。但是,當我嘗試發佈http://google.com時,它不會將域轉換爲IP。

我該怎麼做?例如。當用戶插入http://google.com或任何域時,它將自動解析IP。

我知道函數gethostbyadd,我不知道如何構造它,例如表格,表格,發佈數據。

謝謝,如果有任何幫助。

+0

怎麼樣顯示你已經得到了什麼。 – 2010-09-30 12:53:49

+0

這裏是代碼:http://pastebin.com/E7s57Eak – Ray 2010-09-30 12:56:31

回答

1

您正在尋找的功能是$x = gethostbyname('stackoverflow.com');

+0

不,基本上它是一種形式,當我插入域名時,它應該自動將域名解析爲IP。這是一種後期數據方法。 – Ray 2010-09-30 12:57:42

+1

Raymond您的評論沒有意義。 Aviatrix和其他人給出的建議是現貨。 – 2010-09-30 12:59:55

+0

基本上,當一個人將自己的域或其他域名輸入到「主機」框時,它應該自動將該域解析爲IP。所以他們不需要ping來獲得IP。這裏是我的代碼:http://pastebin.com/E7s57Eak – Ray 2010-09-30 13:00:48

5

你有什麼在一起這麼遠嗎?它如何失敗?

一個瘋狂的猜測是,你輸入http://google.com/並試圖從中獲得一個IP,這將失敗,因爲URL也包含協議信息。您需要通過域名,只有域名到的gethostbyname:

gethostbyname('www.google.com'); // Works 
gethostbyname('http://www.google.com'); // Will not work 

如果你有協議部分(HTTP://)在開始的時候,你可以用parse_url:

gethostbyname(parse_url('http://www.google.com', PHP_URL_HOST)); 

如果您有其他具體問題,請告訴我們。如果你不知道從哪裏開始,我建議通過在編程手冊讀了啓動;)

+0

這不僅是谷歌,它取決於他所放置的任何URL的人。我需要一個自動將域名解析爲IP的簡單表單。 – Ray 2010-09-30 12:58:16

5

我認爲你正在尋找gethostbyname

$ip = gethostbyname('www.google.com'); 

注意,一定要剝去HTTP ://和任何空格/尾隨字符,因爲這可能會阻止準確的結果。

0

在某些人中,功能gethostbyname運行緩慢或運行一段時間。有人說apache需要重啓以啓動功能。我無法證實這一點,但我想給一個替代方法是如何通過域名使用使用XHProf的nslookup

function getAddrByHost($host, $timeout = 1) { 
    $query = `nslookup -timeout=$timeout -retry=1 $host`; 
    if(preg_match('/\nAddress: (.*)\n/', $query, $matches)) 
     return trim($matches[1]); 
} 

echo getAddrByHost('example.com'); 

速度測試,以找出IP:

嘗試1

的gethostbyname 5014593微秒

getAddrByHost 29,656 microsec

嘗試2

的gethostbyname 5016678微秒

getAddrByHost 13887微秒

嘗試3

的gethostbyname 5014640微秒

getAddrByHost 8297微秒

結論:函數的gethostbyname執行超過5秒鐘,這是非常長的。因此,我建議你使用更快的功能getAddrByHost

注:PHP中使用這個文件/etc/resolv.conf獲得DNS服務器:

在我來說,我使用BIND(命名),它在主機127.0.0.1工作

# /etc/resolv.conf 
nameserver 127.0.0.1 
nameserver 8.8.8.8 
nameserver 4.4.4.4 
+0

這是一個已被標記爲刪除的低質量答案。請在代碼之外添加信息,以幫助請求者瞭解此解決方案的工作原理以及未來訪問者的問題。 – JNevill 2017-09-13 15:43:10