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