Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/05/2007, 13h01   #1
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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 :
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"; 
?>
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 13h35   #2
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
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
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 13h39   #3
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Voici ce que:
Code :
echo $_SERVER['HTTP_USER_AGENT'];
Me donne sous Opera:
Citation:
Opera/9.21 (Windows NT 5.1; U; fr)
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 14h16   #4
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 14h19   #5
Membre éclairé
 
Avatar de deY!
 
Inscription : avril 2006
Messages : 403
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 403
Points : 358
Points : 358
Code :
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é...
__________________
deY!
deY! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 14h27   #6
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
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...
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 14h54   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par deY!
Code :
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 :
1
2
3
function est_presente($string, $substring) {
    return (strpos($string, $substring) !== FALSE);
}
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 15h07   #8
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 16h41   #9
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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 :
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 !!
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h54.


 
 
 
 
Partenaires

Hébergement Web