IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

$_SERVER['HTTP_USER_AGENT'] et Opera


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Points : 202
    Points
    202
    Par défaut $_SERVER['HTTP_USER_AGENT'] et Opera
    Bonjour,

    Voici mon souci : dans le code suivant, si je suis sous Opera, la valeur affichée de $browser est IE alors que celle-ci devrait être OP... Je ne comprends toujours pas pourquoi après une matinée à plancher dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    echo $_SERVER['HTTP_USER_AGENT'];
    if (strpos($_SERVER['HTTP_USER_AGENT'],'Firefox')) { $browser='MF'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'Opera')) { $browser='OP'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) { $browser='IE'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'Safari')) { $browser='SF'; }
    else { $browser='IE'; }
    echo"<br>$browser"; 
    ?>

  2. #2
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Je ne sais pas trop pour HTTP_USER_AGENT. Le manuel PHP précise juste que le serveur ne remplis pas forcément toutes les variables.

    Sinon tu as un fonction pour récupérer les information d'un browser :

    http://de3.php.net/manual/fr/function.get-browser.php

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Voici ce que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SERVER['HTTP_USER_AGENT'];
    Me donne sous Opera:
    Opera/9.21 (Windows NT 5.1; U; fr)

  4. #4
    Membre actif Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Points : 202
    Points
    202
    Par défaut
    cerede2000 > je parle de la variable $browser...

    Asmodean > ok mais faut-il encore que mon hébergeur mette à disposition le fichier browscap.ini. Dans le php.ini, browscap est défini no value et j'ai pas trop envie de toucher à php.ini de mon hébergeur, vu que si j'y touche il supprime l'actuel php.ini

  5. #5
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strpos($_SERVER['HTTP_USER_AGENT'],'Firefox') > 0
    strpos ne retourne pas true ou false, mais une position... 0 à n et -1 s'il ne trouve pas la chaine désiré...

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Citation Envoyé par Ikonic
    cerede2000 > je parle de la variable $browser...

    Asmodean > ok mais faut-il encore que mon hébergeur mette à disposition le fichier browscap.ini. Dans le php.ini, browscap est défini no value et j'ai pas trop envie de toucher à php.ini de mon hébergeur, vu que si j'y touche il supprime l'actuel php.ini
    Oui je sait bien mais a partir du moment ou $_SERVER['HTTP_USER_AGENT'] me donner quelque chose avec Opera ta variable $browser devrait contenir OP...

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par deY!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strpos($_SERVER['HTTP_USER_AGENT'],'Firefox') > 0
    strpos ne retourne pas true ou false, mais une position... 0 à n et -1 s'il ne trouve pas la chaine désiré...
    Elle retourne FALSE et non -1 si elle n'est pas trouvée. Toutefois attention à bien interpréter son résultat :
    • La chaîne est trouvée : strpos renvoie sa position. Elle peut donc être à égale à zéro (valeur numérique interprétée comme fausse si on n'utilise pas l'opérateur d'égalité en valeur et en type : ===) si cette chaîne débute par l'autre.
    • La chaîne n'est pas trouvée : strpos renvoie le booléen FALSE


    Quelques exemples :
    • strpos('toto est parti faire les courses', 'toto') : valeur entière nulle (0)
    • strpos("je suis allé chez toto aujourd'hui", 'toto') : 18 si je n'ai pas fait d'erreur
    • strpos("oh j'ai fait une faute de frappe sur touto", 'toto') : valeur booléenne fausse (FALSE)

    Donc si on veut savoir si une chaîne en contient une autre, le test devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function est_presente($string, $substring) {
        return (strpos($string, $substring) !== FALSE);
    }

  8. #8
    Membre actif Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par cerede2000
    Oui je sait bien mais a partir du moment ou $_SERVER['HTTP_USER_AGENT'] me donner quelque chose avec Opera ta variable $browser devrait contenir OP...
    bah oui justement il est là la problème... c'est pourquoi je pose la question...

    julp > en effectuant le test, strpos me retourne bien 1...

    Je comprends vraiment pas alors pourquoi $browser vaut IE au lieu de OP

  9. #9
    Membre actif Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par julp
    La chaîne est trouvée : strpos renvoie sa position. Elle peut donc être à égale à zéro (valeur numérique interprétée comme fausse si on n'utilise pas l'opérateur d'égalité en valeur et en type : ===) si cette chaîne débute par l'autre.
    voilà la solution !!!

    Merci julp !!

    Donc la plupart des sources présentes sur le Net basées sur ce modèle pour la détection du navigateur avec Opera sont FAUSSES.

    Voici la correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (strpos($_SERVER['HTTP_USER_AGENT'],'Firefox')) { $browser='MF'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'Opera')===0) { $browser='OP'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) { $browser='IE'; }
    else if (strpos($_SERVER['HTTP_USER_AGENT'],'Safari')) { $browser='SF'; }
    else { $browser='IE'; }
    Merci encore julp !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. est-ce que $_SERVER['HTTP_USER_AGENT'] est fiable ?
    Par clavier12AZQSWX dans le forum Langage
    Réponses: 1
    Dernier message: 11/06/2010, 10h59
  2. [PHP-JS] $HTTP_USER_AGENT avec ou sans $_SERVER
    Par troumad dans le forum Langage
    Réponses: 10
    Dernier message: 29/11/2007, 22h14
  3. pb de submit d'un form sous IE et Opera
    Par the.chojin dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 30/08/2005, 14h51
  4. [Opera 7 & 8] Position absolue dans conteneur relatif
    Par Sub0 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 16
    Dernier message: 16/08/2005, 23h16
  5. getelementbyid innerhtml sur Opera?
    Par cynthia dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo