[英]Code Addition is Slowing Page Down
我的客户订购了该脚本的另一个添加项,但是我不知道如何解决该问题? 该表大约有50,000行。
while($stats = mysql_fetch_array($get_stats)) {
if ($stats['ip'] == gethostbyaddr($stats['ip'])) { // new code
$is_undef = "Yes"; // causing problems
} else { $is_undef = "No"; } // end new code
echo "<tr><td>" . date("d M Y g:i a ", strtotime($stats['date'])) . "</td><td>" .
$stats['ip'] . "</td><td>" .
parse_url_domain($stats['ref_url']) . "</td><td>" .
$is_undef . "</td></tr>";
}
这是查询:
$get_stats = mysql_query("SELECT * FROM visitors WHERE site='$_GET[site]' AND date >= '$start_date' AND date <= '$end_date' ");
我认为您可能与“ gethostbyaddr”有关。 循环超过50k次将非常慢。
另外,这与问题无关,但是您可能需要考虑一下sql注入。 我希望这不是您正在运行的实际查询。 如果是这样,有人可以简单地将您的桌子放下。
我建议您在将每个地址添加到数据库表之前进行此检查(即每次查看一次而不是每次查看数据50,000次!)
我猜gethostbyaddr()
很慢,因为它找不到IP地址的主机。 以下表达式的目的是什么?
$stats['ip'] == gethostbyaddr($stats['ip'])
假设$stats['ip']
为127.0.0.1
,对应的主机为localhost
。 因此,您需要将127.0.0.1
(一个IP地址)与localhost
(一个主机名)进行比较。
从http://php.net/gethostbyaddr的评论中:
“只是想让所有人都知道,如果IP地址未在DNS中列出,gethostbyaddr()会花费20秒钟以上的时间做出响应。”
我想说的是,循环查找这些主机名可能会减慢您的速度。
您发送给该查询的变量也需要正确地转义,否则您确实会遇到麻烦。
DNS请求可能会花费很长时间,尤其是在5万条记录中。 如果您的客户端要求使用主机名而不是IP地址来进行记录,则可能需要运行某种后台进程来缓存主机名,而不是在每次页面加载时都查找主机名。
同样,大多数ISP使用IP地址块,因此您可以开始建立表来跟踪ISP的IP范围和主机掩码,以切断DNS查找
我认为gethostbyaddr()调用使您减速。
参见http://us3.php.net/manual/zh/function.gethostbyaddr.php#88920
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.