提高 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
我有一个问题,这不一定在此处提出的大多数问题的范围内。
我有一个正在开发的应用程序,它检查域中的某些 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