【问题标题】:PHP fastest way to check list of domainsPHP 检查域列表的最快方法
【发布时间】:2011-11-08 15:17:09
【问题描述】:

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

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

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

【问题讨论】:

  • 这应该是因为您连接的服务器的响应时间,而不仅仅是因为功能。也许你应该找一个更快的 DNS 服务器之类的。
  • 考虑使用多线程来减少总运行时间? tinyurl.com/3tr6dkh

标签: php performance ip host resolve


【解决方案1】:

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

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

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

但是您到底为什么要查看 20.000 个域?一定是有问题的。。

【讨论】:

  • 哈哈没有。我正在尝试创建自己的抗干扰工具。它应该阻止网站。如果我想阻止 facebook,我需要将 facebook 与 267 个顶级域结合起来并解决所有这些问题。如果我有 100 个网站乘以 267 是很多网站...
【解决方案2】:
  • 获得更好的互联网连接速度
  • 如果 CURL 很慢,这是最快的方式

【讨论】:

  • 快速连接无助于 DNS 解析。它完全取决于您查询的 DNS 服务器。
【解决方案3】:

一些想法:

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

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

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

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

  • 确定最适合您的 DNS 服务器并使用它。 Pear has a net dns 具有可能满足您需求的功能的软件包。

【讨论】:

  • 感谢梨小费!我找到了一个 dns 解析示例,我可以在其中指定更快的 DNS 服务器link 你知道我是否必须先在我的服务器上安装 pear 包,或者我是否可以只包含 DNS.php?谢谢
【解决方案4】:

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

但可能内存不足。

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2014-01-02
    • 1970-01-01
    • 2022-06-06
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多