Vérifier si une donnée contient une chaine de caractères

Petit nouveau ! | 3 Messages

18 déc. 2006, 12:30

Bonjour à toutes et tous,
je cherche à savoir comment vérifier si une variable contient une partie d'une chaine de caractères. Par exemple vérifier si $qui contient "googlebot" ou "search.live.com" ou "livebot".
ça va me servir d'éviter de compter les moteurs de recherche lors de campagnes de pub sur mon site.

Ainsi, si le REMOTE_ADDR du visiteur est crawl-66-249-66-76.googlebot.com ou crawl-66-249-65-167.googlebot.com ou crawl-XXX.googlebot.com, je dois être capable de ne pas les compter. Donc, si je pouvais identifier la chaine "googlebot.com" et ne pas l'enregistrer dans la base, ce serait bien.

Je sais que je peux faire en sorte de ne pas compter ces adresses lors du compte rendu de la campagne de pub (lecture des entrée dans le tableau), mais l'idéal serait de ne pas enregistrer les robots dans la base.

J'espère avoir été assez clair. Merci beaucoup à ceux qui pourraient m'aider. Kénavo !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2006, 12:36

Il y a plusieurs fonctions pour faire cela, selon tes affinités avec chacunes, tu peux notamment utiliser strpos() pour retrouver la position d'une sous-chaine, strstr() pour retrouver la sous-chaine, voir un ereg() avec la possibilité d'utiliser les expressions régulières :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1961 Messages

18 déc. 2006, 12:36

Bonjour,

Tu peux utiliser les expressions régulières ou bien les fonctions la famille de la fonction strstr()
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1029 Messages

18 déc. 2006, 12:39

Bonjour,

quelque chose du genre
if(ereg('googlebot.com', REMOTE_ADDR)) {
          echo 'ok';
} else {
          echo 'invalide';
}


L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 3 Messages

18 déc. 2006, 13:37

Merci beaucoup les gars !
vous avez mis dans le mille ! C'est exactement le genre de chose que je cherchais. Encore un conseil s'il vous plaît. Comment comparer ma variable $qui à plusieurs chaines différentes en un seul coup ? Par exemple, est-il possible d'écrire ceci :
eregi("'66.249.66.83', 'googlebot.com', 'search.live.com', 'inktomisearch.com'", $qui)
pour comparer $qui à 66.249.66.83, googlebot.com, search.live.com, inktomisearch.com ?
Merci encore !

Mammouth du PHP | 1029 Messages

18 déc. 2006, 14:06

Salut,

je dirais ceci, mais peut-être que quelqu'un a plus simple.

$reg = array('66.249.66.83', 'googlebot.com', 'search.live.com', 'inktomisearch.com');

foreach ($reg AS $key=>$valeur)
{
	if(ereg($reg[$key], REMOTE_ADDR)) 
	{
		echo 'ok';
	} 
	else 
	{
		echo 'invalide';
	} 
}


L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 3 Messages

18 déc. 2006, 16:33

Salut Maitrepylos,
Après quelques recherches, je crois que ceci permet de faire la même chose, sans boucle ou truc compliqué :
eregi("search.live.com|google.com|googlebot.com|exabot.com|crawl|inktomisearch.com", $qui)
J'ai bon ?
Encore merci.