繁体   English   中英

代码添加减慢了Page Down

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM