Bonjour,
Alors voila. Je suis entrain de me faire un parseur façon bb code. Pour ca, j'utilise la fonction preg_replace_callback.
La première regexp trouve toutes les balises, et appele la méthode "_baliseSimplesVersHtml" qui par exemple me tranforme une balise de type "[ligne]" en un code html affichant une image de séparation.
La seconde regexp récupère les balises de type [definition]blabla[/definition], et envoie vers la méthode baliseComplexeVersHtml, qui va remplacer tout le bloc par "blabla" et une infobulle avec sa définition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $textarea = preg_replace_callback("/(\[([\w]+)[^\]]*\])|(\[\/([\w]+)[^\]]*\])/", array($this, "_baliseSimplesVersHtml"), $textarea); $textarea = preg_replace_callback("/(\[([\w]+)[^\]]*\])((.|\n)*)(\[\/\\2\])/U", array($this, "_baliseComplexeVersHtml"), $textarea);
Ca marche très bien... tant que la page est petite. Si elle dépasse un trop grand nombre de caractère, apache redémare.
Initialement, j'avais php 5.2.3, et sans planter, le callback ne faisait rien. J'ai upgradé en 5.3, et maintenant ca plante
C'est visiblement la seconde regexp qui fait planter le tout car si je l'enlève, tout fonctionne (mais je ne sais pas comment remplacer mes balises complexe...). A noter également que si je garde la seconde regexp et que je remplace ((.|\n)*) au milieu par (.*), ca marche, mais il ne détecte plus les balises avec la balise ouvrante sur une ligne et la balise fermante sur une autre ligne.
Je m'arrache les cheveux et je n'y comprend rien. Please, help !
Si ca peut aider, voila ce que me dit le log apache (en gros, rien) :
Je prend toutes les solutions.. Si quelqu'un a une meilleure expression régulière, une fonction "a la mano" qui fait pareil mais sans planter, une option de configuration sur un php.ini ou je ne sais quoi... Bref, ca fait deux jours que je m'arrache les cheveux la dessus, et pas moyen.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 [Sun Sep 27 21:53:03 2009] [notice] Parent: child process exited with status 255 -- Restarting. [Sun Sep 27 21:53:03 2009] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations [Sun Sep 27 21:53:03 2009] [notice] Server built: Dec 10 2008 00:10:06 [Sun Sep 27 21:53:03 2009] [notice] Parent: Created child process 6536 [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(487): Parent: Sent the scoreboard to the child [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Child process is running [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(408): Child 6536: Retrieved our scoreboard from the parent. [Sun Sep 27 21:53:03 2009] [info] Parent: Duplicating socket 268 and sending it to child process 6536 [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(564): Child 6536: retrieved 1 listeners from parent [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Acquired the start mutex. [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Starting 64 worker threads. [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(605): Parent: Sent 1 listeners to child 6536 [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Starting thread to listen on port 80.
Merci d'avance !
Partager