Discussion:
probleme avec preg_match
(trop ancien pour répondre)
Thief13
2007-08-01 16:24:13 UTC
Permalink
Bonjour à tous !

Voilà, j'ai un petit probleme avec preg_match :
En fait, je m'en sert pour verifier qu'une chaine est dans une autre, et
dans le cas qui me pose probleme, je cherche la chaine contenu dans
$_SESSION['profil'] dans la chaine $infos_vue['profils_autorises'].

voici mon test :

if (preg_match($_SESSION['profil'], $infos_vue['profils_autorises']) ===
false)
{
return false;
}

$_SESSION['profil'] contient 'RPC_RT' et
$infos_vue['profils_autorises'] contient 'gqsd'

cette méthode à toujours bien marché jusqu'ici, mais dans ce cas, je me
retrouve avec un beau :

Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in D:\[...]\fonctions.php on line 817

j'ai bien essayé de lire la doc de preg_match, mais je doit être un gros
boulet, car ça ne m'a pas vraiment avancé...

Je vous remerci d'avance pour votre aide ^^
CrazyCat
2007-08-02 09:39:25 UTC
Permalink
Post by Thief13
$_SESSION['profil'] contient 'RPC_RT' et
$infos_vue['profils_autorises'] contient 'gqsd'
Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in D:\[...]\fonctions.php on line 817
$_SESSION['profil'] est censé être un pattern, or cette variable ne
contient pas les délimiteurs autorisés.
tu devrais donc utiliser '/'.$_SESSION['profil'].'/' ou utiliser autre
chose que preg_match(), par exemple strpos()
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
Thief13
2007-08-02 19:05:53 UTC
Permalink
Post by CrazyCat
tu devrais donc utiliser '/'.$_SESSION['profil'].'/' ou utiliser autre
chose que preg_match(), par exemple strpos()
Super, merci !
Thief13
2007-08-02 09:39:25 UTC
Permalink
Bon, j'ai toujours pas compris pourquoi ça ne marche pas, mais en
désepoire de cause, je me suis vraiment replongé dans la doc, et j'ai
trouvé ça :

"N'utilisez pas preg_match() si vous voulez uniquement savoir si une
chaine est contenue dans une autre. Utilisez dans ce cas les fonctions
strpos() ou strstr(), qui sont beaucoup plus rapides."

Et oui, boulet inside XD

Donc, bon, je vais essayer de voir avec strstr()

Par contre, plusieurs choses :

- Si quelqu'un pouvais quand même m'expliquer ou je me plantais, ça me
permettrait de mieux comprendre, merci d'avance pour son aide

- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
doc a l'air assé claire :

"strpos — Trouve la position d'un caractère dans une chaine"

Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?

Merci d'avance !
CrazyCat
2007-08-02 19:05:53 UTC
Permalink
Post by Thief13
"strpos — Trouve la position d'un caractère dans une chaine"
Extrait de la doc:
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
bmayer
2007-08-03 09:12:27 UTC
Permalink
Bonjour a tous !
Post by CrazyCat
Post by Thief13
"strpos - Trouve la position d'un caractère dans une chaine"
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.
Mouais
Et le jour ou ton aplli tourne sur une config avec du PHP + ancien ?
Post by CrazyCat
Discussions et débats sur l'actualité:http://www.sujets-d-actu.eu
Réseau IRC Francophone:http://www.crazy-irc.net
Thief13
2007-08-03 20:12:17 UTC
Permalink
Post by bmayer
Mouais
Et le jour ou ton aplli tourne sur une config avec du PHP + ancien ?
Oui, c'est logique : par exemple, un jour, si je dev une appli en VB.net
2006, apres je sais pas pourquoi, je la compile avec VB 5 ! et dans
cette optique, il faut que je dev en prenant ça en compte ?

Nan, franchement, si on dev en php 5, on fait tourner sur un serveur en
php 5, c'est tout. On va pas non plus n'utiliser que les fonction php 3
au cas ou, non plus ? XD
bmayer
2007-08-06 09:46:27 UTC
Permalink
Post by Thief13
Post by bmayer
Mouais
Et le jour ou ton aplli tourne sur une config avec du PHP + ancien ?
Oui, c'est logique : par exemple, un jour, si je dev une appli en VB.net
2006, apres je sais pas pourquoi, je la compile avec VB 5 ! et dans
cette optique, il faut que je dev en prenant ça en compte ?
Nan, franchement, si on dev en php 5, on fait tourner sur un serveur en
php 5, c'est tout. On va pas non plus n'utiliser que les fonction php 3
au cas ou, non plus ? XD
Bonjour a tous.
Si tu maitrises ta chaine de production de bout en bout, qu'en est-il
demain ?
Par exemple, php + iis + dll, donc, fonctionne dans le monde
Microsoft.
La boite pour laquelle le travail fut fait change de main, le systeme
est externalisé ... sur un vrai systeme d'Homme, Z-os dans des
partitions Linux ;o] Tout a du etre refait.
Ce que tu developpes aujourd'hui tourne sur un serveur que tu
maitrises. Demain ton client decide que cela ne lui convient plus, que
cela tourne sur une autre config, les emmerdes commencent.
Plus le code est standard, moins on se fait chier, plus tard.

Reste quand meme pas mal de config php4, particulierement dans les
plus grosses ...
Thief13
2007-08-07 10:40:13 UTC
Permalink
Post by bmayer
Plus le code est standard, moins on se fait chier, plus tard.
On peut faire ça, mais on peut aussi faire une documentation sur la
methode d'installation et les prérequis techniques... Ce qui est quand
meme plus propre. mais je sais que ce genre de chose passe au dessus de
la tete de la plupart des devellopeur, car pour être passé deriere
beaucoup de monde, je me rend compte que quasiment personne ne
documente, de commente ETC.

Pour ma part, chaque fonction est commenté ET documenté de manière
détaillé, chaque programme que je fait dispose à la fois d'une
documentation technique, une documentation d'utilisation, et une
documentation d'installation pas a pas.

Bizarement, j'ai beaucoup moin de probleme que tout ces devellopeur que
me font la leçon (car tu n'est pas le seul) sur "Houlala, attention, ta
fonction elle va marcher diféramment sous PHP3, tu te rend compte, si
jamais..."

Avec des si, on coupe du boi, moi, je documente, à chaqun son choi.
bmayer
2007-08-09 17:56:36 UTC
Permalink
Post by Thief13
Post by bmayer
Plus le code est standard, moins on se fait chier, plus tard.
On peut faire ça, mais on peut aussi faire une documentation sur la
methode d'installation et les prérequis techniques... Ce qui est quand
meme plus propre. mais je sais que ce genre de chose passe au dessus de
la tete de la plupart des devellopeur, car pour être passé deriere
beaucoup de monde, je me rend compte que quasiment personne ne
documente, de commente ETC.
Ni ne lit les documentations ...
Post by Thief13
Pour ma part, chaque fonction est commenté ET documenté de manière
détaillé, chaque programme que je fait dispose à la fois d'une
documentation technique, une documentation d'utilisation, et une
documentation d'installation pas a pas.
+1
Post by Thief13
Bizarement, j'ai beaucoup moin de probleme que tout ces devellopeur que
+1, et depuis pas mal d'annees
Post by Thief13
me font la leçon (car tu n'est pas le seul) sur "Houlala, attention, ta
fonction elle va marcher diféramment sous PHP3, tu te rend compte, si
jamais..."
Loin de moi l'idée de donner des leçons.
Mais je maintiens; je n'ecrirais pas le code avec une fonction dont le
nom est equivoque/ambigu
On peut aussi fabriquer une voiture en mettant l'accelerateur au
milieu, et le frein a droite, l'ecrire dans la doc, prevenir les
utilisateurs.
Thief13
2007-08-10 11:50:41 UTC
Permalink
Post by bmayer
Ni ne lit les documentations ...
Pas du tout daccord : les doc sont tellement rare que chaque fois que
j'en fournit, on me regarde avec des yeux rond, et elle est lue juste
par curiosité

Et j'ai systématiquement été félicité pour ces documentation... si elle
n'avait pas été lu, je ne voi pas comment ça aurrais pu arriver ^^
Post by bmayer
Loin de moi l'idée de donner des leçons.
Mais je maintiens; je n'ecrirais pas le code avec une fonction dont le
nom est equivoque/ambigu
On peut aussi fabriquer une voiture en mettant l'accelerateur au
milieu, et le frein a droite, l'ecrire dans la doc, prevenir les
utilisateurs.
Je ne vois pas ce qu'il y a d'ambigu, franchement, si c'est comme ça,
n'utilise plus aucune des fonction qui ont un comportement un peut
différent entre PHP3 et PHP4

je te signale par exemple, si tu parle de voiture, que l'on de doit pas
utiliser la pédale de frein de la meme manière sur une voiture qui as
l'aide au freinage d'urgence, et une qui ne l'a pas :
avec, on doit piller, sans, on doit pomper...
Avec ta logique, la pédale de frein est donc ambigu, et il ne faut plus
en mettre dans le voitures ?
Non, il y a eu une évolution, et le comportement est diférent, c'est
tout, il faut le documenter, et l'utiliser à bon escient.

Antoine Polatouche
2007-08-07 10:40:13 UTC
Permalink
Post by bmayer
Si tu maitrises ta chaine de production de bout en bout, qu'en est-il
demain ?
<snip>
Post by bmayer
Reste quand meme pas mal de config php4, particulierement dans les
plus grosses ...
Sur le site php.net il est annoncé la fin de php4.
Donc pour les applis en php4, il est temps de songer à les adapter à php5...

PHP 4 end of life announcement
[13-Jul-2007]

Today it is exactly three years ago since PHP 5 has been released. In
those three years it has seen many improvements over PHP 4. PHP 5 is
fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will
be discontinued.

The PHP development team hereby announces that support for PHP 4 will
continue until the end of this year only. After 2007-12-31 there will be
no more releases of PHP 4.4. We will continue to make critical security
fixes available on a case-by-case basis until 2008-08-08. Please use the
rest of this year to make your application suitable to run on PHP 5.


Traduction rapide pour ceux qui ne lisent pas l'anglais:
Plus de mises à jour de php4 à partir de 2008 sauf cas exceptionnel
jusqu'en aout 2008, ensuite php4 rejoint phpfi...
Mickael Wolff
2007-08-07 19:18:26 UTC
Permalink
Post by bmayer
Reste quand meme pas mal de config php4, particulierement dans les
plus grosses ...
Et bien il va falloir penser à migrer, car PHP4 n'est plus supporté
<http://www.phpindex.com/index.php/2007/07/13/3474-arret-du-support-de-php4>.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
CrazyCat
2007-08-03 20:12:17 UTC
Permalink
Post by bmayer
Post by CrazyCat
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.
Et le jour ou ton aplli tourne sur une config avec du PHP + ancien ?
Lis bien: strpos() *accepte* les chaines de caractères *mais pas*
strRpos avant PHP5

Conclusion: strpos() fonctionne partout (ou presque) avec des chaines de
caractères, strrpos() non.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
Thief13
2007-08-03 09:12:27 UTC
Permalink
Post by CrazyCat
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.
Ok, donc là, si ça marche avec strpos, c'est parce qu'on est en php5,
mais si on fait tourner le script sur du 4, ça va foirer...
bmayer
2007-08-02 19:05:53 UTC
Permalink
Post by Thief13
- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
"strpos - Trouve la position d'un caractère dans une chaine"
Oulah, lisez (toi et ton collegue) MIEUX la doc.
"strpos - Trouve la position d'UN CARACTERE dans une chaine"
strstr() va, elle, trouver une chaine dans une autre
Post by Thief13
Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?
Merci d'avance !
de rien
Thief13
2007-08-03 09:12:27 UTC
Permalink
Post by bmayer
Oulah, lisez (toi et ton collegue) MIEUX la doc.
"strpos - Trouve la position d'UN CARACTERE dans une chaine"
strstr() va, elle, trouver une chaine dans une autre
Bin, c'est exactement ce que je me disait, mais en fait, non, ça marche
avec une chaine, et super bien d'ailleur ^^ j'ai eu beau tester dans
tout les sens, ça marche
bmayer
2007-08-02 19:05:53 UTC
Permalink
Post by Thief13
Bon, j'ai toujours pas compris pourquoi ça ne marche pas, mais en
désepoire de cause, je me suis vraiment replongé dans la doc, et j'ai
"N'utilisez pas preg_match() si vous voulez uniquement savoir si une
chaine est contenue dans une autre. Utilisez dans ce cas les fonctions
strpos() ou strstr(), qui sont beaucoup plus rapides."
Et oui, boulet inside XD
Donc, bon, je vais essayer de voir avec strstr()
- Si quelqu'un pouvais quand même m'expliquer ou je me plantais, ça me
permettrait de mieux comprendre, merci d'avance pour son aide
- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
"strpos - Trouve la position d'un caractère dans une chaine"
Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?
Merci d'avance !
Strpos() retourne la position d'UN caractere, pas d'une chaine.
Dans ton cas, strstr() est ton amie.
Antoine Polatouche
2007-08-02 20:10:31 UTC
Permalink
Post by bmayer
Post by Thief13
Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?
Strpos() retourne la position d'UN caractere, pas d'une chaine.
Dans ton cas, strstr() est ton amie.
et dans la doc pour strstr():
Note: If you only want to determine if a particular needle occurs within
haystack, use the faster and less memory intensive function strpos()
instead.

Quant à savoir si strpos permet de chercher une chaîne, en cas de doute,
il est plus rapide de faire un test en php que de suivre un fil de
discussion ;-)

echo("strpos('pilepoilpaille','pa') -> ".strpos('pilepoilpaille','pa'));
Continuer la lecture sur narkive:
Loading...