我有一个问题,这不一定在这里提出的大多数问题的范围内。
我正在开发一个应用程序,它会检查某个域的某些A记录,还会测试解析服务器上的端口,以检查它们是否处于打开和监听状态。
我在网站的本地副本上添加了功能,但对我来说发布速度太慢,想到它,当前发布的网站也是如此。
您可以在链接上看到该应用:http://www.domainion.co.za
输入域名(不含www),它将检查某些记录。
这是一个symfony应用程序,我通过运行带有digs的多个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() - 这需要大约相同的时间,并以字符串形式返回所有结果,我无法使用它。
proc_open - 需要更长时间,也会返回一个长字符串。
symfony process()组件 - 花费更长时间并将所有结果作为一个字符串返回
dns_check_record() - 您无法检查特定的子域记录
TLDR:有什么方法可以获得我想要的记录( n .domain.tld)并且仍然可以快速运行应用程序吗?
谢谢
答案 0 :(得分:4)
$ php -r 'var_dump(dns_get_record("35.174.0.154.in-addr.arpa"));'
在五分之一秒内返回以下内容,包括调用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"
}
}
答案 1 :(得分:0)
使用本地DNS。它比对@ 8.8.8.8
的查询要快dig -x 154.0.174.35 +short