Aller au contenu

User Agent


Sujets conseillés

Posté

Bonjour :)

Suite à cet article, http://www.actulab.com/cloaking-en-php.php

Je veux faire la même chose mais dans le sens inverse, c'est à dire identifier les utilisateurs :)

$user_agent = "msnbot/1.0 (+http://search.msn.com/msnbot.htm)";

$test1 = strpos($user_agent,"mozilla");

$test2 = strpos($user_agent,"msie");

$test3 = strpos($user_agent,"gecko");

$test4 = strpos($user_agent,"firefox");

if ($test1==FALSE OR $test2==FALSE OR $test3==FALSE OR $test4==FALSE)

    echo 'Tu n\'es pas un robot';

else

    echo 'Tu es un robot';

Or à chaque fois, ça me répond: "Tu n'es pas un robot"

Ma condition marche donc mal, pouvez vous m'aider ? :blush:

Merci d'avance :P

Posté

Salut Poppy,

C'est un Robot si toutes les conditions sont fausses... et pas seulement l'une d'elles. Il te faut donc utiliser AND au lieu de OR, non ?

Et utilise les === au lieu de == car strpos peut tout de même retourner 0 si la chaîne débute par ta recherche. Il faut donc vérifier le type, et pas seulement la valeur ;)

Dan

Posté

Par ailleurs tes critères de test ne me semblent pas pertinents: certains robots ont "Mozilla" dans leur user agent (Slurp et certains Googlebots).

Et méfie-toi de la casse: "mozilla" n'est pas la même chose que "Mozilla".

Posté

Salut,

Gaffe avec Safari qui utilise les mots "Mozilla" et "Gecko" dans son User-Agent, alors qu'il n'a rien à voir avec Mozilla et que son moteur de rendu n'est pas Gecko (c'est KHTML)

;)

Posté
Salut Poppy,

C'est un Robot si toutes les conditions sont fausses... et pas seulement l'une d'elles. Il te faut donc utiliser AND au lieu de OR, non ?

Et utilise les === au lieu de == car strpos peut tout de même retourner 0 si la chaîne débute par ta recherche. Il faut donc vérifier le type, et pas seulement la valeur ;)

Dan

<{POST_SNAPBACK}>

J'ai exactement ce que tu m'as dit et le résultat est le même :(

Posté
Salut,

Gaffe avec Safari qui utilise les mots "Mozilla" et "Gecko" dans son User-Agent, alors qu'il n'a rien à voir avec Mozilla et que son moteur de rendu n'est pas Gecko (c'est KHTML)

;)

<{POST_SNAPBACK}>

C'est pas grâve ça en faite :D

Le but de mon script est de me faire des stats en fonction des différents robots.

J'aimerai continuer, mais si vous en avez un bien, je suis preneur :rolleyes:

Posté
J'ai exactement ce que tu m'as dit et le résultat est le même
Salut Poppy,

Si le test est faux partout c'est un robot... c'est ton if qui est mis à l'envers.

Mais comme on te l'a signalé, tester de cette manière uniquement sur le User_Agent n'est pas correct. Googlebot a des User_Agents avec Mozilla ...

Posté
Salut Poppy,

Si le test est faux partout c'est un robot... c'est ton if qui est mis à l'envers.

Mais comme on te l'a signalé, tester de cette manière uniquement sur le User_Agent n'est pas correct. Googlebot a des User_Agents avec Mozilla ...

<{POST_SNAPBACK}>

Ah ok, très bien. Je vais tenter autrement alors :whistling:

Merci bcp pour vos réponses ;)

Posté
Je vais tenter autrement alors :whistling:

<{POST_SNAPBACK}>

Il suffit de faire exactement comme dans l'(excellent :lol: )article que tu cites en référence non?

Posté

Pour finir, les $test1,.. sont des booléens. Tu n'as donc pas besoin de les comparer avec les booléens, tu peux écrire comme ceci :

if ($test1 AND $test2 AND... )

Mais tu devrais t'intéresser aux expressions régulières, qui ne sont pas si difficiles que cela (surtout pour trouver une chaine de caractères ;) )

Posté
Pour finir, les $test1,.. sont des booléens. Tu n'as donc pas besoin de les comparer avec les booléens, tu peux écrire comme ceci :

if ($test1 AND $test2 AND... )

Ben non Nico, justement pas ! ... :whistling:

strpos() retourne la position de la sous-chaîne dans la chaîne principale. Mais comme cette sous-chaîne peut très bien se trouver au début, la valeur 0 est une valeur correcte...

C'est pour cette raison que je lui suggérais d'utiliser les === au lieu de ==, pour s'assurer que le type booléen est respecté, et non une valeur 0.

Posté
C'est pour cette raison que je lui suggérais d'utiliser les === au lieu de ==, pour s'assurer que le type booléen est respecté, et non une valeur 0.

<{POST_SNAPBACK}>

Ca parait logique, surtout que dans l'article de Jan ainsi que dans php.net, ils utilisent !==.

Habituellement: == et !=

Ici: === et !==

;)

Posté

hummm..oui..

En fait, mon analyse tient surtout du fait que :

[mode mauvais perdant]c'est une méthode couramment employée de chercher le 'début d'une chaine' dans une autre chaine, pour voir si la première chaine est bien dans la seconde. Cependant, le raisonnement est faux. Il existe des méthodes (les expressions régulières) qui permettent de chercher une chaine dans une autre, et qui renvoient un booléen s'ils le trouvent.

C'est cette méthode qui est juste. Celle que tu utilises marche, mais n'est pas 'logique' :

On ne cherche pas "la position d'un caractère dans une chaine" pour savoir si ce caractère est dans la chaine.

On cherche "si le caractère est dans la chaine".

[fin mode mal luné]

D'ailleurs, la méthode que tu emploies t'oblige à utiliser une astuce (comparer les 2 valeurs ET le type, avec le triple signe '=').

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...