簡體   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