我有一個我想解析爲IP地址的20.000個域名列表。我正在尋找最快的方式在php中做到這一點。我使用gethostbynamel()
但這太慢了。我找另一個命令,可以過濾掉根本不存在主機,然後運行gethostbynamel()
PHP查看域名列表的最快方法
- 我已經試過
checkdnsrr("host.com","A")
但就是太慢。 curl
也太慢了。
我有一個我想解析爲IP地址的20.000個域名列表。我正在尋找最快的方式在php中做到這一點。我使用gethostbynamel()
但這太慢了。我找另一個命令,可以過濾掉根本不存在主機,然後運行gethostbynamel()
PHP查看域名列表的最快方法
checkdnsrr("host.com","A")
但就是太慢。curl
也太慢了。它不會得到任何更快。您必須聯繫每個域以查看它們是否可用。即使是大約50ms的平均往返時間,您也需要15分鐘以上才能查看所有20000個域。這就是如果你不必等待暫停。
如果你製作這個多線程,你將只會變得更快。您可以輕鬆設置10個線程來並行連接10臺服務器,這也將處理時間縮短到10分鐘。
但是PHP並不是真正爲多線程設計的,因此您可能需要使用其他工具。
但是爲什麼你要檢查20.000個域名?它必須是有鬼..
哈哈沒有。我正在嘗試創建我自己的反分心工具。它應該阻止網站。如果我想阻止Facebook,我需要結合facebook的267個頂級域名並解決所有這些問題。如果我有100個網站的時間267是相當多的網站... – user670186
哦,那麼好了。 :) – GolezTrol
快速連接將無助於DNS解析。它完全依賴於您查詢的DNS服務器。 –
一些想法:
假設它是可能的地址是不正確的,運行一個正則表達式的格式驗證嘗試解決這些問題之前。屬於同一個域成類似團體,並檢查該域一次組,而不是爲每個地址
排序地址這是否需要多次運行或者只是一次?如果多次,您可以考慮使用緩存(如apc或zend緩存)來緩存ips,或者以某種其他方式(文件或數據庫)存儲IP,然後測試該ip以查看是否解析,如果不是,請嘗試新的DNS通話
單獨的任務分解成多個子任務(幾個PHP進程)
確定什麼最快的DNS服務器是爲你,並使用它。 Pear has a net dns封裝的功能可能適合您的需求。
感謝梨尖!我發現了一個DNS解析示例,我可以指定更快的DNS服務器[鏈接](http://pear.php.net/manual/en/package.networking.net-dns.net-dns-resolver.query.php)你知道我是否必須首先在我的服務器上安裝pear包,或者如果我可以包含DNS.php?謝謝 – user670186
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");
}
?>
可能會耗盡內存,雖然。
這應該是因爲你連接的服務器的響應時間,而不僅僅是因爲功能。也許你應該找到一個更快的DNS服務器或其他東西。 – Tarik
考慮多線程以減少總運行時間? http://tinyurl.com/3tr6dkh – stslavik