phpbar.de logo

Mailinglisten-Archive

[php] get_browser Beine gemacht ...

[php] get_browser Beine gemacht ...

Norbert Pfeiffer norbert at itbw.de
Don Aug 31 11:08:48 CEST 2006


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