Kod İlavesi Sayfa yavaşlıyor

6 Cevap php

Müvekkilim script başka bir ek emretti, ama ben yavaşlama düzeltmek için nasıl bilemiyorum? Tablo, yaklaşık 50.000 satır var.

 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>";
 }

Bu sorgu:

 $get_stats = mysql_query("SELECT * FROM visitors WHERE site='$_GET[site]' AND date >= '$start_date' AND date <= '$end_date' ");

6 Cevap

Bu çeki before Eğer veritabanı tablosunda her adresi eklemek (yani bir kez her yerine her zaman kat 50.000 veri görülüyor yapıyor öneririz!

Sana "gethostbyaddr" ile bir sorunu olabileceğini düşünüyorum. O 50k zamanlarda üzerinde döngü gerçekten yavaş olacak.

Ayrıca, soruyla ilgili olduğunu, ancak sql enjeksiyon biraz düşünmek isteyebilirsiniz değil. Ben size çalışan gerçek sorgu değildir umarım. Eğer öyleyse, birisi sadece masa bırakabilirsiniz.

Ben IP adresi için bir host bulmak için başarısız çünkü gethostbyaddr() yavaş sanırım. Aşağıdaki ifadenin amacı ne ki?

$stats['ip'] == gethostbyaddr($stats['ip'])

Varsayalım $stats['ip'] olan {[(1)}] ve karşılık gelen bir ana localhost. Yani localhost (bir ana bilgisayar adı) 127.0.0.1 (bir IP adresi) karşılaştırmak istiyorum.

de yorumlarından http://php.net/gethostbyaddr:

"Hemen hemen herkes () IP adresi DNS listede yoksa yanıt fazla 20 saniye sürer gethostbyaddr bildirmek istedim."

Ben bir döngü içinde bu hostnames görünümlü muhtemelen sizi yavaşlatan söyleyebilirim.

Ayrıca bu sorgunun yolluyoruz değişkenlerin doğru kaçtı gerekir ya da gerçekten sorun için soruyorsun.

DNS istekleri özellikle 50k kayıtları karşısında, oldukça uzun bir zaman alabilir. Müşteri kayıtları için hostname yerine IP adresine sahip talepleri varsa, bunun yerine her sayfası yükleme bakmadan hostnames önbelleğe arka plan sürecinin çeşit çalıştırmak isteyebilirsiniz.

Ayrıca, çoğu ISS'ler ip adres blokları kullanın, böylece DNS aramalarını kesip ISS'ler için ip aralıklarını takip tabloları ve hostmaskelerini oluşturmaya başlayabilirsiniz

Ben gethostbyaddr () çağrısı sizi yavaşlatan düşünüyorum.

Bkz http://us3.php.net/manual/en/function.gethostbyaddr.php#88920