Bonjour,
Je souhaite filtrer une plage ip allant de 66.249.65.1 à 66.249.65.99
Cela fait un bout de temps que je me prend la tête dessus mais je n'y arrive pas :oops:
Quelqu'un peut il m'aider pour le regex ?
Merci d'avance
Version imprimable
Bonjour,
Je souhaite filtrer une plage ip allant de 66.249.65.1 à 66.249.65.99
Cela fait un bout de temps que je me prend la tête dessus mais je n'y arrive pas :oops:
Quelqu'un peut il m'aider pour le regex ?
Merci d'avance
Peux-tu nous montrer ce que tu as déjà fait qu'on te dise ce qui ne va pas ?
J'ai fait un truc barbare
Code:
1
2
3
4 if (ereg('66.249.65', $_SERVER['REMOTE_ADDR'])) { echo "NON AUTORISE"; }
Il faut protéger les points dans ton expression.
Cpednant tu aurais du consulter la documentation :
- il faut utiliser preg_match() au lieu de ereg()
- il faut utiliser strpos() ou strstr() au lieu de preg_match quand on veut juste trouver une chaine.
Quesako ??????Citation:
Il faut protéger les points dans ton expression.
preg_match() ou strpos() ou strstr() ca en fait du monde ...
strstr() --> Trouve la première occurrence dans une chaîne
Je ne voie pas en quoi cela peut mettre utile ????
strpos() --> Trouve la position d'un caractère dans une chaîne
Alors encore moins ?????
preg_match() Oui bien sur mais si je savais le faire, je ne demanderai pas de l'aide non ?
si strstr() ou strpos() retourne FALSE, ta recherche n'est pas contenu dans la chaine.
Mais ca ne marche que si tu cherchais '66.249.65.' comme dans ton essai.
Ca vaut le coup d'essayer au moins non ?Citation:
preg_match() Oui bien sur mais si je savais le faire, je ne demanderai pas de l'aide non ?
Attention l'expression reguliere dans preg_match doit être délimitée, dans la documentation par exemple ils utilisent /
Le point dans une expression régulière signifie n'importe quel caractère.Citation:
Quesako ??????
Si tu veux indiquer le vrai symbole point il faut ecrire \.
Pense egalement a utiliser ^ pour indiquer le début de ton expression et $ pour la fin.
Bon, en gros, plutôt que de me montrer comment faire, tu me dis de me débrouiller avec la doc :ccool:
Citation:
Aurait-il vraiment tort ?
- Ce n'est pas une question d'avoir tort ou d'avoir raison. Il s'agirait plutôt de partager des connaissances....
- A quoi bon un forum alors ?
Autant le remplacer par une page indiquant : Pour vos questions voir la doc officielle !
Dès fois, j'ai du mal à vous suivre (les modos). Pourquoi m'écrire tout un tas de messages, m'expliquant que si je veux la réponse je dois l'obtenir moi même, ne répondant pas à ma question initiale ?
Ne serait il pas plus rapide, plus simple et plus efficace de me répondre ?
Qu'est cela vous coute de me montrer un exemple en rapport avec ma question ?
Si je viens demander de l'aide, c'est que même avec la doc je ni arrive pas. Sinon je n'aurai pas posé une question ici !
Parce que trouver quelque chose en l'ayant cherché est toujours plus efficace et sera mieux retenu.
Mais si tu y tient, la solution avec les regex serait la suivante :
Qui sera moins performant qu'une solution basée sur strstr par exempleCode:
1
2
3
4 if ( preg_match('/66\.249\.65/', $_SERVER['REMOTE_ADDR']) ) { echo "NON AUTORISE"; }
Excuses-nous pour t'avoir donné l'impression de te prendre de haut. Je suis tout à fait conscient du chinois que peuvent représenter les regex au début. C'est juste que l'utilisation de strstr est beaucoup plus simple, et je pensais que tu t'en tirerais facilement.Code:
1
2
3
4 if ( strstr($_SERVER['REMOTE_ADDR'], '66.249.65') ) { echo "NON AUTORISE"; }
Encore une fois, toutes mes excuses et bon courage pour la suite.
Le plus rapide et le plus simple c'est de ne pas s'interesser du tout a ta question.Citation:
Ne serait il pas plus rapide, plus simple et plus efficace de me répondre ?
Il n'y a personne ici qui soit une machine a ecrire du code à la demande.
Je fais souvent des recherches pour pouvoir répondre precisemment a une question ... je me demande alors pourquoi c'est moi qui fait la recherche et pas la personne qui a posé la question.
Quand je lis la doc de ereg() et que je vois qu'il ne faut pas l'utiliser, quand je cherche "expression regulière adresse ip" et que je trouve plein de sujet, je pense que je vais plutot te remettre sur les rails de la recherche plutot de t'ecrire pour toi une solution toute prête.
Regarde la réponse de s.n.a.f.u, c'est uniquement une application de ce que je t'ai conseillé une heure seulement apres ton mettre message : mettre \. et utiliser preg_replace.
Est-ce que tu n'aurais pas pu l'ecrire toi meme suite à mon message ?
Bonjour,
La solution est la fonction "ip2long()" :
http://fr3.php.net/manual/fr/function.ip2long.php
Oui, c'est absolument vrai ! Mais a t-on le droit de ne pas comprendre ?Citation:
Parce que trouver quelque chose en l'ayant cherché est toujours plus efficace et sera mieux retenu.
Oui évidemment .... Mais à quoi servirai un forum alors ?Citation:
Le plus rapide et le plus simple c'est de ne pas s'interesser du tout a ta question.
Quand tu dis des choses aussi radicales, j'ai le sentiment que ton rôle de modo te fais chier face à des questions qui te semblent évidentes ?????
Oui évidemment ....Citation:
Il n'y a personne ici qui soit une machine a ecrire du code à la demande.
D'un autre coté, j'ai aidé pas mal de gens sur ce forum et lorsqu'on me demande par exemple comment afficher un texte dans une page PHP, plutôt que de renvoyer à la doc, je préfère donner un exemple :
Malgré que cela soit dans la doc et malgré qu'avec une recherche google on trouve des milliers d'exemples. Bon, c'est une question de point de vue ...Code:<?php echo "j'affiche un truc"; ?>
C'est d'autant plus vrai que la demande est compliqué (expression regulière par exemple).
Moi aussi il m'est arrivé de me dire merde, une simple recherche google et les réponses sont là par centaines.... mais je le fais quand même car ce qui est évident pour certains c'est de l'hébreux pour d'autre ...
Oui moi aussi mais aucun ne répond à ma question puisque ma recherche porte sur des plages d'adresse IP ...Citation:
quand je cherche "expression regulière adresse ip" et que je trouve plein de sujet
D'autant que pour trouvé une réponse, il faut formulé la bonne question et en l'occurence, ma recherche aurai du porté sur strstr() ...
Oui c'est vrai. Mais comme le dis s.n.a.f.uCitation:
Regarde la réponse de s.n.a.f.u, c'est uniquement une application de ce que je t'ai conseillé une heure seulement apres ton mettre message : mettre \. et utiliser preg_replace.
Citation:
Je suis tout à fait conscient du chinois que peuvent représenter les regex au début
Malgré que cela te paraisse inconcevable, non, je n'aurai pas pu l'écrire moi même :oops:Citation:
Est-ce que tu n'aurais pas pu l'ecrire toi meme suite à mon message ?
Quand à la solution de snafu
D'une part, je le remercie pour sa réponse et pour sa diplomatie et d'autre part, j'aurai effectivement pu comprendre cela vu la simplicité :oops:Citation:
if ( strstr($_SERVER['REMOTE_ADDR'], 'xx.xxx.xx') ) {
echo "NON AUTORISE";
}
Je ne sais pas pourquoi, mais j'ai fais un bloquage sur ce coup là :oops:
Ne vous est il jamais arrivé de "bloqué" sur un truc qui crève les yeux ?
Bon en tous cas, merci à vous d'avoir pris le temps de me répondre :ccool:
Ce code est incomplet, car si l'adresse du client est '66.249.65.100', elle est en dehors de la fourchette et malgré tout considérée comme interdite. D'autre part, si dans l'avenir, la fourchette passe de '66.249.65.1' à '66.249.66.99', ça ne fonctionne plus.
Personnellement, je préfère donc le code suivant qui me semble être plus 'universel'.
Code:
1
2
3
4
5
6
7
8
9 $ipMin = ip2long('66.249.65.1'); $ipMax = ip2long('66.249.65.99'); $ipClient = ip2long($_SERVER['REMOTE_ADDR']); if (($ipClient >= $ipMin) && ($ipClient <= $ipMax)) { echo 'NON AUTORISE'; }
J'achète aussi car là, il s'agit de plages :ccool: