PHP花了很长时间来解析主机名

时间:2013-02-06 17:32:59

标签: php dns resolve resolver dig

我们看到一个非常奇怪的问题,PHP花了很长时间才解决任何主机名,每5-10次尝试就会随机发生。我们使用以下脚本来检查它......

<?php

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;

$host = "google.com";
echo "looking up ".$host."<br/>";
$ip = gethostbyname($host)
//$ip = rtrim(`/usr/bin/dig $host A +short | /usr/bin/tail -1`);
echo "IP = " . $ip . "<br/>";

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "<br/>Total Time: ".$totaltime." seconds";

?>

要查找google.com大多需要几毫秒,但是在5-10次尝试中需要10-15秒!我们看到任何域名都有相同的行为。注释掉的行使用dig命令行来解析,当使用它时我们看不到任何问题。这一切都非常奇怪,因为他们使用相同的解析器。我们已经从命令行运行这个PHP脚本,以便将apache从等式中取出 - 结果相同,所以它似乎纯粹是一个PHP问题。

PHP文档说gethostbyname()函数可能需要4秒钟 - 我们看到的时间要比这长得多。我们实际上并没有使用这个函数 - 我们遇到的真正问题是由于无法解析主机名而导致cURL调用超时。上面的脚本纯粹是为了评估我们是否在PHP中有解决问题,我们这样做了!

在完全失去的时候 - 谷歌搜索已经很少了。即使指出我们可能开始调查的地方,也会非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

我首先要看看您的DNS解析位置,服务器上当前指向的DNS在哪里?也许尝试将其更改为其中一个公共DNS服务器(8.8.8.8或4.2.2.2),看看是否遇到同样的问题。