Mailinglisten-Archive |
Hallo, wenn man, z.B. bei der Auswertung von Logfiles 1300 mal die Funktion get_browser aufruft, benoetigt das Script dafuer ca. 40 Sekunden. Da jedoch in Lastspitzen genau 1300 Log-Eintraege/Sekunde auftreten koennen, ist das einfach unakzeptabel. Nun ist mir eine andere filesystembasierte Loesung eingefallen, die deutlich weniger als 1 Sekunde fuer 1300 Eintraege benoetigt. Wen dies nicht interessiert, bitte jetzt das Lesen beenden ... <?php /* * in $AA['ua'] steht der UserAgent drin */ $UA = array('xyz'=>0); $ua_file = 'ua/ua/'.md5($AA['ua']); if (!file_exists($ua_file)) { $UA = get_object_vars(get_browser($AA['ua'])); $bw_cont = base64_encode(serialize($UA)); $bw_file = 'ua/bw/'.md5($bw_cont); if (!file_exists($bw_file)) { $fp = fopen($bw_file, 'w'); $wr = fputs($fp, $bw_cont); $cl = fclose($fp); } $fp = fopen($ua_file, 'w'); $wr = fputs($fp, $bw_file); $cl = fclose($fp); } else { $bw_file = file_get_contents($ua_file); $UA = unserialize(base64_decode(file_get_contents($bw_file))); } if (isset($UA['browser'])) { $browser = $UA['browser']; $USA[$browser] = (isset($USA[$browser])) ? ($USA[$browser] + 1) : 1; } else { $USA['xyz']++; } print_r($USA); ?> Kurz in Worten: Im Ordner /us/ua/ gibt es fuer jeden aufgetretenen UserAgent-String einen Dateieintrag, welcher den Dateinamen des dazugehoerigen Browser-Objektes in /ua/bw/ enthaelt. Fuer performaceverbessernde Hinweise bin ich sehr dankbar. m. b. G. N. Pfeiffer --------------------- normal: 06131-1436094 Notruf: 0177-1741686 --------------------- e.o.f.
php::bar PHP Wiki - Listenarchive