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