提高 exec() 语句的性能

Increasing performance of exec() statement

我有一个问题,这不一定在此处提出的大多数问题的范围内。

我有一个正在开发的应用程序,它检查域中的某些 A 记录,还测试解析服务器上的端口以检查它们是否打开和侦听。

我已经在站点的本地副本上添加了功能,但是发布速度太慢了,想想看,当前发布的站点也是如此。

您可以在 link 上看到该应用:http://www.domainion.co.za

输入一个域名(不带 www),它会检查某些记录。

这是一个 symfony 应用程序,我通过 运行ning 多个 exec() 语句获取这些记录并挖掘特定信息。我喜欢使用 exec 的原因是因为如果返回多条记录,就像下面的命令一样,它可以让您将每个结果分配给数组的索引。

dig -x 154.0.174.35 +short @8.8.8.8

motairgdiool.hosted.co.za。 (索引 0)

kent.aserv.co.za。 (索引 1)

现在,这花费的时间太长了(平均加载时间为 8 秒)。我的问题是,如果您必须在此应用程序中执行所有这些命令并在 shell 脚本中 运行 它,它们需要不到一秒钟的时间才能 运行,我怀疑这是我的原因花了这么长时间,PHP 正在为每个命令打开和关闭虚拟 shell。

为了更快地运行这些查询,我尝试了以下方法:

shell_exec() - 这需要大约相同的时间,并且 returns 所有结果都是一个字符串,我不能使用它。

proc_open - 需要更长的时间,也是 returns 一个长字符串。

symfony process() 组件 - 需要更长的时间并且 returns 所有结果作为一个字符串

dns_check_record() - 您无法检查特定的子域记录

TLDR:有什么方法可以让我获得我想要的记录 (n.domain.tld) 并且仍然有应用程序 运行 快速?

谢谢

$ php -r 'var_dump(dns_get_record("35.174.0.154.in-addr.arpa"));'

Returns 以下不到五分之一秒的时间,包括调用 PHP 解释器:

array(2) {
  [0]=>
  array(5) {
    ["host"]=>
    string(25) "35.174.0.154.in-addr.arpa"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(7192)
    ["type"]=>
    string(3) "PTR"
    ["target"]=>
    string(16) "kent.aserv.co.za"
  }
  [1]=>
  array(5) {
    ["host"]=>
    string(25) "35.174.0.154.in-addr.arpa"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(7192)
    ["type"]=>
    string(3) "PTR"
    ["target"]=>
    string(25) "motairgdiool.hosted.co.za"
  }
}

使用本地 DNS。它比查询 @8.8.8.8

更快
dig -x 154.0.174.35 +short