0

我有一个要解析为 IP 地址的 20.000 个域的列表。我正在寻找在 php 中执行此操作的最快方法。

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

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

4 回答 4

1

它不会变得更快。您必须联系每个域以查看它们是否可用。即使平均往返时间约为 50 毫秒,您也需要 15 分钟以上的时间来检查所有 20000 个域。那就是如果您不必等待超时。

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

但是 PHP 并不是真正为多线程设计的,因此您可能需要使用其他工具。

但是你到底为什么要查看 20.000 个域呢?应该是什么鱼。。

于 2011-09-01T18:31:23.483 回答
0
  • 获得更好的互联网连接速度
  • 如果 CURL 很慢,这是最快的方法
于 2011-09-01T18:29:12.180 回答
0

一些想法:

  • 假设地址可能不正确,请在尝试解析它们之前运行正则表达式来验证它们的格式。

  • 将属于同一域的地址分类到相似的组中,并为该组检查该域一次,而不是为每个地址检查一次

  • 这需要运行多次还是只运行一次?如果多次,您可以考虑使用诸如 apc 或 zend 缓存之类的缓存来缓存 ip,或者以其他方式(文件或 db)存储 IP,并测试该 ip 以查看它是否解析,如果没有,请尝试新的dns 调用

  • 将任务分成多个子任务(几个php进程)

  • 确定最适合您的 DNS 服务器,并使用它。Pear 有一个 net dns包,其功能可能适合您的需求。

于 2011-09-01T18:38:31.217 回答
0

脚本1.php

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

脚本2.php

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

不过可能内存不足。

于 2012-05-10T18:48:53.607 回答