Php 我应该多次调用dns\u get\u record(),还是使用dns\u ANY调用一次?

Php 我应该多次调用dns\u get\u record(),还是使用dns\u ANY调用一次?,php,Php,对于PHP函数,使用DNS\u ANY获取所有记录是否比单独调用类型发出更多或更少的http(或任何协议)请求 // Is just 1 request? Or many requests (1 per each record type)? dns_get_record('example.com', DNS_ANY); VS // 3 total requests? dns_get_record('example.com', DNS_A); dns_get_record('example.c

对于PHP函数,使用
DNS\u ANY
获取所有记录是否比单独调用类型发出更多或更少的http(或任何协议)请求

// Is just 1 request? Or many requests (1 per each record type)?
dns_get_record('example.com', DNS_ANY);

VS

// 3 total requests?
dns_get_record('example.com', DNS_A);
dns_get_record('example.com', DNS_AAAA);
dns_get_record('example.com', DNS_MX); 
基本上,我希望尽可能减少网络请求,但我不知道dns_get_record()在幕后是如何工作的

因为文档中说,
DNS\u ANY
并不总是返回所有记录,所以我想我可以尝试单独调用我想要的类型,以获得更可预测的结果。但是这样做会产生3个单独的请求,而不是一个带有DNS的请求。这是真的吗


顺便说一句,
DNS\u ALL
DNS\u A+DNS\u AAAA+DNS\u MX
如果任何类型为空,将返回false,因此我不能这样做。

单独获取每种类型的信息效率很低,因为这将涉及多个请求,而将DNS\u任何参数与DNS\u get\u record()一起使用,在一个请求中获取所有信息。DNS_ANY是一个便于查询DNS服务器信息的参数。使用此特定参数,您可能会获得相当多的信息

如果您尝试在Linux命令行提示符下为gmail.com之类的域使用诸如“dig”之类的实用程序,您自己就会看到这一点,如下所示:

`;; QUESTION SECTION:
;gmail.com.                     IN      ANY

;; ANSWER SECTION:
gmail.com.              2386    IN      MX      30 alt3.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      40 alt4.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              2386    IN      MX      10 alt1.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      20 alt2.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              85186   IN      SOA     ns1.google.com. dns-admin.google                                                                              .com. 2012061200 21600 3600 1209600 300
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.
gmail.com.              81180   IN      NS      ns2.google.com.

;; AUTHORITY SECTION:
gmail.com.              81180   IN      NS      ns2.google.com.
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         223708  IN      A       216.239.32.10
ns2.google.com.         223708  IN      A       216.239.34.10
ns3.google.com.         223708  IN      A       216.239.36.10
ns4.google.com.         223708  IN      A       216.239.38.10

;; Query time: 4 msec
[snip] 
dig gmail.com ANY

结果如下:

`;; QUESTION SECTION:
;gmail.com.                     IN      ANY

;; ANSWER SECTION:
gmail.com.              2386    IN      MX      30 alt3.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      40 alt4.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              2386    IN      MX      10 alt1.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      20 alt2.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              85186   IN      SOA     ns1.google.com. dns-admin.google                                                                              .com. 2012061200 21600 3600 1209600 300
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.
gmail.com.              81180   IN      NS      ns2.google.com.

;; AUTHORITY SECTION:
gmail.com.              81180   IN      NS      ns2.google.com.
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         223708  IN      A       216.239.32.10
ns2.google.com.         223708  IN      A       216.239.34.10
ns3.google.com.         223708  IN      A       216.239.36.10
ns4.google.com.         223708  IN      A       216.239.38.10

;; Query time: 4 msec
[snip] 
PHP的dns_get_record()的行为类似于dig实用程序,即它联系dns服务器并执行查询。像“DNS_ANY”这样的参数是有利的,因为它一次获取所有内容。由于“dig”需要4毫秒,我认为dns_get_record()需要的时间大约与此相同或稍长。由于DNS_ANY参数可能会产生比所需更多的信息,例如,可以通过使用DNS_MX函数将该查询限制为仅“MX”记录

如果您对该函数的PHP内部源代码感到好奇,请查看。内部源代码通常用C编程语言编写

如果您想更多地了解dns系统的工作原理,特别是在使用PHP时,请参阅我为PHP架构师撰写的题为“电子邮件验证”的文章(2008年6月)