我在Windows上的PHP脚本的使用时间有些问题(使用Plesk Panel 12在IIS 8.5上使用PHP 5.5.14)。当我的PHP脚本需要连接到外部资源(邮件服务器,社交媒体API等)时,这需要几秒钟,这太长了。仅当我使用主机名(例如smtp.gmail.com)时才会出现此问题。当我使用该服务器的IP地址时,脚本只需几毫秒即可加载。因此,问题似乎在DNS解析中。
我找到了关于DNS Lookup in PHP的这个帖子,所以我尝试了以下PHPMailer:
奇怪的是第3种方法仅适用于IPv4地址:
$result = dns_get_record("<hostname of mailserver>");
foreach($result as $output):
if($output['type'] == 'A'):
$ip = $output['ip'];
endif;
endforeach;
....
$mailer->Host = $ip;
....
当我尝试将IPv6用于该服务器(解析完美)时,PHPMailer表示它无法连接到服务器。
$result = dns_get_record("<hostname of mailserver>");
foreach($result as $output):
if($output['type'] == 'AAAA'):
$ip = $output['ipv6'];
endif;
endforeach;
....
$mailer->Host = $ip;
....
当然,第一种方法(仅使用服务器的主机名)是首选方法,因为像Google这样的服务有很多不断变化的IP地址。为什么这个方法在首先执行DNS查找时需要几秒钟才能执行,然后使用该IP只需要几毫秒?
答案 0 :(得分:1)
在使用主机名时,似乎首先解析了IPv6 AAAA记录,并且PHPMailer正在尝试连接到该主机名。一旦失败,它就会连接到IPv4地址。