BenCC: Browsererkennung funkt immer noch nicht

Hallo Leute,

ich habe ein PHP-Script (auswertung.php), welches den Browsertyp ermitteln und das Ergebnis auch grafisch darstellen soll. Leider wird z.B. bei IE5.0 und Opera6.0 der gleiche grafische Balken verändert, obwohl ich unterschiedliche UserAgents benutzt habe. Das gleiche trifft auch auf den NN4.7x. Hier ändert sich der Balken, welcher andere Browser darstellen soll. Hier das Script:

<html>
<head>
<title>Browserstatistik</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="white">
<p>Folgende Ergebnisse wurden ermittelt:</p>
<?php
$user = $_SERVER['HTTP_USER_AGENT'];
$datei="ergebnis.txt";
$zeiger=fopen($datei,"r");
$umfrage=fread($zeiger,filesize($datei));
fclose($zeiger);
$werte=explode(",",$umfrage);

if(preg_match('/Mozilla/3.0\ (.*/',$user)) { $werte[0]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[1]++; }
elseif(preg_match('/Mozilla/4.5\ (.*/',$user)) { $werte[2]++; }
elseif(preg_match('/Mozilla/4.7\ (.*/',$user)) { $werte[3]++; }
elseif(preg_match('/Mozilla/5.0\ (.*/',$user)) { $werte[4]++; }
elseif(preg_match('/Opera/ (.*/',$user)) { $werte[5]++; }
else { $werte[6]++; }

// Gesamtzahl aller Wahlvorgänge
$gesamt=$werte[0]+$werte[1]+$werte[2]+$werte[3]+$werte[4]+$werte[5]+$werte[6];
// Höchstlänge der Balken angeben
$laenge=400;
// Anteil von Balken 1 (Indexwert NS30!)
$laengeNS30=($werte[0]/$gesamt)*$laenge;
// Anteil von Balken 2 (Indexwert NS40!)
$laengeNS40=($werte[1]/$gesamt)*$laenge;
// Anteil von Balken 3 (Indexwert NS45!)
$laengeNS45=($werte[2]/$gesamt)*$laenge;
// Anteil von Balken 4 (Indexwert NS47!)
$laengeNS47=($werte[3]/$gesamt)*$laenge;
// Anteil von Balken 5 (Indexwert NS50!)
$laengeNS50=($werte[4]/$gesamt)*$laenge;
// Anteil von Balken 6 (Indexwert OPER!)
$laengeOPER=($werte[5]/$gesamt)*$laenge;
// Anteil von Balken 7 (Indexwert OTHER!)
$laengeOTHER=($werte[6]/$gesamt)*$laenge;
// Werte auf ganze Zahlen runden
$laengeNS30=round($laengeNS30,0);
$laengeNS40=round($laengeNS40,0);
$laengeNS45=round($laengeNS45,0);
$laengeNS47=round($laengeNS47,0);
$laengeNS50=round($laengeNS50,0);
$laengeOPER=round($laengeOPER,0);
$laengeOTHER=round($laengeOTHER,0);

$neuerinhalt= implode(",",$werte);
$schreiben=fopen($datei,"w");
fwrite($schreiben,$neuerinhalt);
fclose($schreiben);
?>
<p>Bisher haben <?php echo $gesamt; ?> Teilnehmer</i> abgestimmt.<br>
So sieht das Ergebnis aus:</p>
<table border="0">
<tr>
<td><b>Netscape3.0</b></td>
<td> </td><td width="<?php echo $laengeNS30; ?>px" bgcolor="red"> </td>
<td> <?php echo $werte[0];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.0</b></td>
<td> </td><td width="<?php echo $laengeNS40; ?>px" bgcolor="yellow"> </td>
<td> <?php echo $werte[1];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.5</b></td>
<td> </td><td width="<?php echo $laengeNS45; ?>px" bgcolor="green"> </td>
<td> <?php echo $werte[2];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.7</b></td>
<td> </td><td width="<?php echo $laengeNS47; ?>px" bgcolor="blue"> </td>
<td> <?php echo $werte[3];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape5.0</b></td>
<td> </td><td width="<?php echo $laengeNS50; ?>px" bgcolor="black"> </td>
<td> <?php echo $werte[4];?></i></td>
</tr></table><table>
<tr>
<td><b>Opera</b></td>
<td> </td><td width="<?php echo $laengeOPER; ?>px" bgcolor="blue"> </td>
<td> <?php echo $werte[5];?></i></td>
</tr></table><table>
<tr>
<td><b>Andere Browser</b></td>
<td> </td><td width="<?php echo $laengeOTHER; ?>px" bgcolor="magenta"> </td>
<td> <?php echo $werte[6];?></i></td>
</tr>
</table>
</body>
</html>

Hat jemend einen Tipp für mich, wie ich das ändere?
Danke im Voraus.

PS: Die datei ergebnis.txt beinhaltet 7x den Wert 0 durch Komma getrennt.

mfg
BenCC

  1. Hi,
    das ist genau das, worüber hier schon sooft diskutiert wurde, nämlich das man Browser nicht 100% richtig erkennen kann. Opera gab sich bei mir bei der default Einstellung übrigens als Internet Explorer aus, bis ich es umgestellt hatte.

    $xNeTworKx.

  2. Hallo

    Wie sieht es mit der browsecpa.ini aus? Kannst Du die nutzen?
    Dann hast kriegst Du über die Funktion getBrowser() genau Infos über den Browser, soweit das möglich ist, da auch hier der UA untersucht wird, aber solange der UA nich gefaked ist bekommt man den richtigen Browser. Deine Prüfung ist doch recht mager.

    Michael

    1. Hallo

      Wie sieht es mit der browsecpa.ini aus? Kannst Du die nutzen?

      Wo gibts die denn? Ich konnte bislang nur eine browsecap.ini finden.
      (Welche wohl ASP tauglich sein soll)

      Sven

  3. hi

    if(preg_match('/Mozilla/3.0\ (.*/',$user)) { $werte[0]++; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[1]++; }
    elseif(preg_match('/Mozilla/4.5\ (.*/',$user)) { $werte[2]++; }
    elseif(preg_match('/Mozilla/4.7\ (.*/',$user)) { $werte[3]++; }
    elseif(preg_match('/Mozilla/5.0\ (.*/',$user)) { $werte[4]++; }
    elseif(preg_match('/Opera/ (.*/',$user)) { $werte[5]++; }
    else { $werte[6]++; }

    du glaubst also, dass man unterschiedliche Browser über dieses "Mozilla/x.x" unterscheiden kann? Dann irrst du gewaltig. Zunächst einmal haben die meisten da 4.0 (IE, NN4.0) oder 5.0 (konq, Mozilla) stehen - sofern das niemand verändert hat. Bei Opera hat der "eigene" String nichts derartiges.

    Wenn du schon etwas halbwegs brauchbares aus dem Useragent holen willst (wovon ich DIRNGEND abrate, weil bei dem nur gelogen wird), dann solltest du zunächst alles wo "Opera" drin steht absortieren und bei dem Rech nach "MSIE", "konqueror" oder "Gecko" suchen - was übrig bleibt ist dann glückssache in der Zuordnung.

    Grüße aus Bleckede

    Kai