我有一个我想要解析为IP地址的20.000个域名列表。我正在寻找最快的方式在php中做到这一点。
我使用了gethostbynamel()
,但这太慢了。我正在寻找可以过滤掉不存在的主机的另一个命令,然后运行gethostbynamel()
checkdnsrr("host.com","A")
,但这太慢了。 curl
也太慢了。答案 0 :(得分:1)
它不会更快。您必须联系每个域以查看它们是否可用。即使平均往返时间约为50毫秒,您还需要15分钟才能查看所有20000个域名。那就是你不必等待超时。
如果你制作这个多线程,你只会变得更快。您可以轻松地设置10个线程并行连接到10个服务器,这也将处理时间缩短到10个。
但PHP实际上并不是为多线程设计的,所以你可能想要使用其他工具。
但为什么你要查看20.000个域名呢?它一定是可疑的......
答案 1 :(得分:0)
答案 2 :(得分:0)
一些想法:
假设地址可能不正确,请在尝试解决之前运行正则表达式验证其格式。
将属于同一个域的地址排序到类似的组中,并为该组检查该域名,而不是每个地址
这需要多次运行还是只执行一次?如果多次,您可以考虑使用缓存(如apc或zend缓存)缓存ips,或者以其他方式存储IP(文件或数据库),并测试该IP以查看它是否已解析,如果没有,请尝试新的dns致电
将任务分成多个子任务(几个php进程)
确定最快的DNS服务器是什么,并使用它。 Pear has a net dns包具有可能满足您需求的功能。
答案 3 :(得分: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");
}
?>
虽然可能会耗尽内存。