Szopen Xiao

PHP DNS相关函数的问题

2014-11-26

PHP DNS查询在 linux 等系统上会因为使用的库不一样而存在不同的行为。
目前按库函数使用的优先级从高到低是dns_searchres_nsearchres_search,其中主要存在于res_search在查询时MX记录时会进行搜索查询,导致MX记录查询结果不符合预期。为了避免这种情况需要在查询域名后加上一个句点.号。
要确定PHP使用的是那种库,可以在PHP编译前的configure时的查看类似下面的信息

checking for res_nsearch... no
checking for __res_nsearch... yes
checking for dns_search... no
checking for __dns_search... no
checking for dns_search in -lresolv... no
checking for __dns_search in -lresolv... no

上面的检查结果是dns_searchres_nsearch都不存在,下面的结果是res_nsearch存在

checking for res_nsearch... no
checking for __res_nsearch... no
checking for res_nsearch in -lresolv... no
checking for __res_nsearch in -lresolv... yes

根据上面的结果PHP将使用res_nsearch相关函数。在查询MX记录时只需要输入域名即可。例如getmxrr('126.com',$mix)

如果使用了res_search相关函数,在查询MX记录是在域名后增加句点.号。
例如域名126.comk这么一个错误域名,当使用getmxrr('126.comk',$mix)来查询时,会返回mail.b-io.co等类似错误记录。但是当在域名后面增加一个句点.getmxrr('126.comk.',$mix)查询就正常了。
这个问题存在于dns_get_recordgetmxrr两个函数在获取域名MX记录时。

res_searchres_nsearch一般位于相同包中

comments powered by Disqus