2011-09-01 25 views
0

我有一個我想解析爲IP地址的20.000個域名列表。我正在尋找最快的方式在php中做到這一點。我使用gethostbynamel()但這太慢了。我找另一個命令,可以過濾掉根本不存在主機,然後運行gethostbynamel()PHP查看域名列表的最快方法

  1. 我已經試過checkdnsrr("host.com","A")但就是太慢。
  2. curl也太慢了。
+1

這應該是因爲你連接的服務器的響應時間,而不僅僅是因爲功能。也許你應該找到一個更快的DNS服務器或其他東西。 – Tarik

+0

考慮多線程以減少總運行時間? http://tinyurl.com/3tr6dkh – stslavik

回答

2

它不會得到任何更快。您必須聯繫每個域以查看它們是否可用。即使是大約50ms的平均往返時間,您也需要15分鐘以上才能查看所有20000個域。這就是如果你不必等待暫停。

如果你製作這個多線程,你將只會變得更快。您可以輕鬆設置10個線程來並行連接10臺服務器,這也將處理時間縮短到10分鐘。

但是PHP並不是真正爲多線程設計的,因此您可能需要使用其他工具。

但是爲什麼你要檢查20.000個域名?它必須是有鬼..

+0

哈哈沒有。我正在嘗試創建我自己的反分心工具。它應該阻止網站。如果我想阻止Facebook,我需要結合facebook的267個頂級域名並解決所有這些問題。如果我有100個網站的時間267是相當多的網站... – user670186

+0

哦,那麼好了。 :) – GolezTrol

0
  • 獲得更好的互聯網連接速度
  • 如果捲曲慢,這是最快的方法
+1

快速連接將無助於DNS解析。它完全依賴於您查詢的DNS服務器。 –

0

一些想法:

  • 假設它是可能的地址是不正確的,運行一個正則表達式的格式驗證嘗試解決這些問題之前。屬於同一個域成類似團體,並檢查該域一次組,而不是爲每個地址

  • 排序地址這是否需要多次運行或者只是一次?如果多次,您可以考慮使用緩存(如apc或zend緩存)來緩存ips,或者以某種其他方式(文件或數據庫)存儲IP,然後測試該ip以查看是否解析,如果不是,請嘗試新的DNS通話

  • 單獨的任務分解成多個子任務(幾個PHP進程)

  • 確定什麼最快的DNS服務器是爲你,並使用它。 Pear has a net dns封裝的功能可能適合您的需求。

+0

感謝梨尖!我發現了一個DNS解析示例,我可以指定更快的DNS服務器[鏈接](http://pear.php.net/manual/en/package.networking.net-dns.net-dns-resolver.query.php)你知道我是否必須首先在我的服務器上安裝pear包,或者如果我可以包含DNS.php?謝謝 – user670186

0

script1.php

<? 
if (!$argv[1]) exit; 
$ip = gethostbynamel($argv[1]); 
// do something 
?> 

script2.php

<? 
$domains = array(); 
foreach($domains as $domain){ 
    shell_exec("php script1.php $domain"); 
} 
?> 

可能會耗盡內存,雖然。