phpbar.de logo

Mailinglisten-Archive

Re: [php] $HTTP_USER_AGENT
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [php] $HTTP_USER_AGENT



At 18:34 01.07.99 +0200, Rudolf Koch wrote:
>Ich habe bei meinem Counter folgende Probleme:
>
>mit -- if(eregi("MSIE 4",$HTTP_USER_AGENT)) -- überprüfe ich, ob der User
>den ie4 hat. Wie aber kann ich feststellen, welcher Wert dieser bei Netscape
>oder Aol ist, zudem Netscape noch beim user_agent ziemlich andere Werte
>ausgibt.
>
>Wie kann ich das Betriebsystem feststellen? Netscape zeigt den Wert "Win95",
>IE zeigt "Windows 95", welchen Werte sind diese bei Linux, etc. Es wäre gut,
>wenn jemand alle Werte von Browsern und Betriebssystemen, die zu allen
>Browsern kompatibel sind. (z.b. "Win" und "95" sind ja in beiden user_agents
>der Browser enthalten.

Hi,
ich arbeite an ähnlichem...
ich bin dabei, ein auswert-script zu schreiben, dass alle Möglichen
Informationen aus dem User rausholt... *HAHA* ;)

Ich bin schon ein bisschen weiter als du...
allerdings steck ich auch noch mittendrin... siehe an dem $ua = "..."; am
anfang, welches den echten User-Agent überschreibt... ich hab das bisherige
script mal angehängt, vielleicht bringt es dich weiter...

dabei ist mir übrigens was aufgefallen, PHP3 such bei regexp immer die
größtmögliche "antwort", bei perl konnte man das mit irgendeinem flag oder
sowas einstellen, das es halt nicht die größtmögliche sondern die
kleinstmögliche findet...

Bsp:

<?php
$ua = $USER_AGENT;
if( eregi( "Win(.*)(\);)", $ua, $win_ver ) ) $win_ver = $win_ver[1];
if( eregi( "Windows(.*)(\);)", $ua, $win_ver ) ) $win_ver = $win_ver[1];
?>

Nehmen wir nun mal 2 verschiedene User-Agents-Kennungen:
Mozilla/4.0 (compatible; MSIE 4.01; Windows 98; TUCOWS)
Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)

So, und schon ist das Problem da, beim 2. wird $win_ver den korrekten Wert
enthalten, also " NT" (das leerzeichen wird nacher per trim() elimeniert),
beim ersten allerdings steht in $win_ver folgendes: " 98; TUCOWS)", da er
nach dem größtmöglichen Ergebnis gesucht hat, das \) erlaubt ihm ja bis
dorthin zu gehen...

Gibt es keine Möglichkeit PHP3 dazu zu bringen, das kleinstmögliche
Ergebnis zu präsentieren, wäre vielleicht was für PHP/3.0.12 oder so...
allerdings bin ich keiner der beteiligten Programmierer und C kann ich auch
(noch) nicht...
Wo könnte man den solche "Wünsche" bzw. Vorschläge ähh.. vorschlagen ;) ?

Bye
 Dante
<?

$header = getallheaders();
$ua = $header['User-Agent'];
$ua = "Mozilla/4.0 [en] (compatible; Opera/3.0; Windows 4.10) 3.51";
list( $browser, $ua ) = split( "/", $ua, 2 );
list( $version, $ua ) = split( " ", $ua, 2 );

if( $browser == "Mozilla" ) {
    $moz_browser = true;
    $browser = "Netscape";
    $moz_ver = $version;
    if( ereg( "\[([a-z]{2})\]", $ua, $language ) ) $language = $language[1];
    if( eregi( "MSIE", $ua ) ) { eregi( "MSIE ([0-9]\..+);", $ua, $version ); $version = $version[1]; $browser = "Internet Explorer"; }
    if( eregi( "Opera", $ua, $version ) ) { eregi( "Opera[/ ]([0-9]\..+);", $ua, $version ); $version = $version[1]; $browser = "Opera"; }
    if( eregi( "Win(nt|[0-9]{1,2})", $ua, $win_ver ) ) $win_ver = $win_ver[1];
    if( eregi( "Windows(nt|[0-9]{1,2})", $ua, $win_ver ) ) $win_ver = $win_ver[1];
    if( $win_ver ) $win_ver = trim( $win_ver );
    if( $win_ver == "95" ) $win[95]++;
        elseif( $win_ver == "98" ) $win[98]++;
        elseif( $win_ver == "16" || ereg( "^3\.", $win_ver ) ) $win[16]++;
        elseif( eregi( "nt", $win_ver ) || ereg( "4\..+", $win_ver ) ) $win[nt]++;
}

echo( "Mozilla-Browser? " );
if( $moz_browser ) echo( "Ja" );
echo( "Mozilla-Version: $moz_ver
Sprache: $language
Browser: $browser
Browser-Version: $version
Windows-Version: $win_ver
" );

?>


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive