PHP检查域列表的最快方法

时间:2011-09-01 18:24:06

标签: php performance ip host resolve

我有一个我想要解析为IP地址的20.000个域名列表。我正在寻找最快的方式在php中做到这一点。

我使用了gethostbynamel(),但这太慢了。我正在寻找可以过滤掉不存在的主机的另一个命令,然后运行gethostbynamel()

  1. 我试过checkdnsrr("host.com","A"),但这太慢了。
  2. curl也太慢了。

4 个答案:

答案 0 :(得分:1)

它不会更快。您必须联系每个域以查看它们是否可用。即使平均往返时间约为50毫秒,您还需要15分钟才能查看所有20000个域名。那就是你不必等待超时。

如果你制作这个多线程,你只会变得更快。您可以轻松地设置10个线程并行连接到10个服务器,这也将处理时间缩短到10个。

但PHP实际上并不是为多线程设计的,所以你可能想要使用其他工具。

但为什么你要查看20.000个域名呢?它一定是可疑的......

答案 1 :(得分:0)

  • 获得更好的互联网连接速度
  • 如果CURL很慢,这是最快的方式

答案 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");
}
?>

虽然可能会耗尽内存。