gpt4 book ai didi

使用外部主机名时 PHP 响应缓慢

转载 作者:可可西里 更新时间:2023-11-01 10:35:47 26 4
gpt4 key购买 nike

我在 Windows 上的 PHP 脚本执行时间上遇到了一些问题(使用 Plesk Panel 12 的 IIS 8.5 上的 PHP 5.5.14)。当我的 PHP 脚本需要连接到外部资源(邮件服务器、社交媒体 API 等)时,这需要几秒钟的时间,这太长了。只有当我使用主机名(例如 smtp.gmail.com)时才会出现此问题。当我使用该服务器的 IP 地址时,脚本仅需几毫秒即可加载。因此,问题似乎出在 DNS 解析上。

我找到了关于 DNS Lookup in PHP 的帖子, 所以我用 PHPMailer 尝试了以下操作:

  1. 使用邮件服务器的主机名作为主机(慢)
  2. 使用邮件服务器的 IP 地址作为主机(快!)
  3. 让 PHP 执行 DNS 查找,然后使用该 IP 地址作为主机(快!):

奇怪的是,第三种方法只适用于 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 只需要几毫秒?

最佳答案

似乎在使用主机名时,首先解析 IPv6 AAAA 记录,PHPMailer 正在尝试连接到该记录。一旦失败,它将连接到 IPv4 地址。

关于使用外部主机名时 PHP 响应缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27696043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com