Opera auslesen

  • Warum kann das Script hier 'Opera' nicht auslesen?

    PHP
    $os = $_SERVER['HTTP_USER_AGENT'];
    if (strpos($os, Opera)) {
    echo "Opera detected";
    }
  • Code
    [COLOR=#000000][COLOR=#0000cc]$os [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$_SERVER[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'HTTP_USER_AGENT'[/COLOR][COLOR=#006600]]; 
    if ([/COLOR][COLOR=#0000cc]strpos[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$os[/COLOR][COLOR=#006600], '[/COLOR][COLOR=#0000cc]Opera[/COLOR][COLOR=#006600]')) { 
    echo [/COLOR][COLOR=#cc0000]"Opera detected"[/COLOR][COLOR=#006600]; 
    }  [/COLOR][/COLOR]
  • [littlebitspam]
    Er ist zu blöd ein Design zu Coden das auf allen Browser gleich aussieht , deswegen muss er den Browser ermitteln

    Oder er will ne tolle Seite machen , das wenn man drauf geht er jeden zeigen kann wie toll er ist und was er alles auslesen kann

    Oder er macht eine Analyse

    [/littlebitspam]

  • Ok, dann nehm ich das zurück.
    Wobei du, wenn du dich mit PHP nicht gut auskennst, besser ein fertiges Statistik Modul verwendest (wie google analytics oder ähnliches).

    Gruss

  • Ich kenne mich mit PHP gut aus und deine Methode mit den Anführungszeichen klappt ebenfalls nicht.

    Mit dem selben Code wie in meinem ersten Beitrag kann ich Linux, Firefox, MSIE, Windows uvm. auslesen. Nur halt eben Opera nicht.

  • Wobei gut auskennen ein variabler Begriff ist nicht wahr :)

    Was bekommst du denn für Werte wenn du mit Opera ein get_browser() ausgibst?
    Poste mir mal den ganzen Output dann schauen wir mal wie wir an den Wert rankommen. Hab da leider kein Opera am Start.

  • Ich habe es jetzt nicht mit get_browser() getestet, da ich mir dazu noch erst mal die Datei browscap ini zulegen muß. Aber wenn ich $_SERVER['HTTP_USER_AGENT'] verwende, bekomme ich folgende Ausgabe:

    Zitat

    Opera/9.64 (X11; Linux i686; U; de) Presto/2.1.1

  • Ah, interessante Situation *g*

    PHP
    $os = $_SERVER['HTTP_USER_AGENT']; 
    if (strpos($os, 'Opera')) { 
    echo "Opera detected"; 
    }


    ist äquivalent zu

    PHP
    $os = $_SERVER['HTTP_USER_AGENT']; 
    if (strpos($os, 'Opera')!=0) { 
    echo "Opera detected"; 
    }


    In diesem Fall ist die strpos aber eben 0 :)
    Richtig wäre es so:

    PHP
    $os = $_SERVER['HTTP_USER_AGENT']; 
    if (strpos($os, 'Opera')!==false) { 
    echo "Opera detected"; 
    }

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Hmm ... das Problem wäre somit dann wohl gelöst aber das Rätsel bleibt nach wie vor offen:

    Warum hat Opera als einziger Browser den Wert 0 und all die anderen Begriefe haben einen höhren Wert als 0?

    Firefox hat z.B. den Wert 93. Linux hat den Wert 21. Was haben diese Zahlen denn überhaupt an sich?

  • Wenn du dir mal auf php.net die strpos Funktion anschauen würdest, wäre das Rätsel auch für dich gelöst. Sie liefert dir nämlich die Position einer Zeichenkette in einer anderen Zeichenkette zurück. Also ein strpos() nach "Opera" bei dieser Zeichenkette "blablablaOpera" ergäbe 9 (fängt immer bei 0 an). Und bei "Operablablabla" ergäbe sie eben 0, weil Opera an erster Stelle ist.

    Das wurde bei deinem Script natürlich zum Verhängnis, da 0 false ist, und somit interpretiert dein Script den Rückgabewert der strpos() Funktion als false.

  • Hinweis:
    Manche Browserkennungen enthalten z.B. das Wort "Mozilla" oder "Firefox", auch wenn sie ganz andere Browser sind.
    Mein Konqueror hat z.B.: "Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.87 (like Gecko) SUSE" (wenn ich es nicht umstelle *g*)

    Daher solltest du get_browser verwenden oder bei PHPClasses nach der Browser-Klasse suchen. Die achten sicherlich auf solche Dinge.