Poppy Posté 16 Juillet 2005 Posté 16 Juillet 2005 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 ? Merci d'avance
Dan Posté 16 Juillet 2005 Posté 16 Juillet 2005 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
Jan Posté 16 Juillet 2005 Posté 16 Juillet 2005 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".
Dudu Posté 16 Juillet 2005 Posté 16 Juillet 2005 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)
Poppy Posté 16 Juillet 2005 Auteur Posté 16 Juillet 2005 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
Poppy Posté 16 Juillet 2005 Auteur Posté 16 Juillet 2005 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 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
Dan Posté 16 Juillet 2005 Posté 16 Juillet 2005 J'ai exactement ce que tu m'as dit et le résultat est le mêmeSalut 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 ...
Poppy Posté 16 Juillet 2005 Auteur Posté 16 Juillet 2005 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 Merci bcp pour vos réponses
Jan Posté 16 Juillet 2005 Posté 16 Juillet 2005 Je vais tenter autrement alors <{POST_SNAPBACK}> Il suffit de faire exactement comme dans l'(excellent )article que tu cites en référence non?
Anonymus Posté 16 Juillet 2005 Posté 16 Juillet 2005 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 )
Dan Posté 17 Juillet 2005 Posté 17 Juillet 2005 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 ! ... 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.
Poppy Posté 17 Juillet 2005 Auteur Posté 17 Juillet 2005 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 !==
Anonymus Posté 17 Juillet 2005 Posté 17 Juillet 2005 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 '=').
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant