|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Bonjour à tous.
Contexte : Je souhaite utiliser la fonction token_get_all : Cette fonction éclate un code source php en multiple "jeton" identifiant le type d'élément php utilisé. Mon problème: Mais bien sur cette fonction marche correctement uniquement si on lui passe en paramètre du code php... et uniquement du code php. Or je veux analyser un fichier PHP, même lorsque celui-ci contient de l'HTML mélangé avec des parties en PHP... Je souhaite donc parser un fichier PHP, et en extraire les parties uniquement PHP (si possible en identifiant les lignes) pour utiliser token_get_all : grosso modo ce que fait tidy en HTML (nettoyer et manipuler les documents HTML, et les traiter sous forme de balises hiérarchisées.).. ..mais en PHP (repérer les blocs php) ! Connaissez-vous une fonction ou une extension qui ferait cela ? Merci aux experts (et à leur mémoire |
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Fred Professeur des Ecoles Inscription : mai 2009 Messages : 503 ![]() |
Peut-être qu'une fonction de ce type suffirait ?
Code :
|
||
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Merci,
mais je cherche une solution plus carré, qui marcherait à tous les coups. Ce que je veux dire c'est que ta solution ne marcherais pas par exemple avec un php qui contiendrait : Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() Fred Professeur des Ecoles Inscription : mai 2009 Messages : 503 ![]() |
Je ne peux garantir ma solution,
je l'ai d'ailleurs modifiée pour le cas d'une dernière balise non fermée. Néanmoins, pour l'exemple que tu donnes, elle fonctionne parfaitement. Je donne donc le code modifié : Code :
je n'ai peut-être pas réinventé la poudre, et l'outil que tu cherches n'existe peut-être pas. Après tout, ce n'est qu'une expression régulière qui fait tout le travail. Fred |
||
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Merci Fred pour l'attention que tu porte à mon problême
,Quand je parlais de ré-inventer la poudre ou de code foireux, je ne parlais pas de toi mais de moi ("je"). D'autre part, les limites d'une simple expression rationnelle ne me convienne pas, même dans ta seconde version modifiée. Mon exemple était a l'évidence pas assez clair, je te présente (moi aussi ) une seconde version de mon exemple qui montre les limites de l'expression rationnelle: Code :
et il me parait étrange qu'il n'existe pas d'outils déjà fait.. ..je continue donc de chercher ! |
||
|
|
00
|
|
|
#6 | |||
|
Membre chevronné
![]() Fred Professeur des Ecoles Inscription : mai 2009 Messages : 503 ![]() |
Citation:
Ce n'est pas grave. Mais comme je suis têtu, je propose une dernière mouture qui ne se laisse pas piéger par ton dernier exemple. Code :
Fred |
|||
|
00
|
|
|
#7 | ||||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Pour le developpement être têtu est une qualité..
.. même si ton dernier code que j'ai testé retourne ceci : Code :
Code :
..mais c'est aussi une qualité dans le developpement Merci Fred. |
||||
|
|
00
|
|
|
#8 | |
|
Membre chevronné
![]() Fred Professeur des Ecoles Inscription : mai 2009 Messages : 503 ![]() |
Que neni !
Refais le test, mais ma dernière (3ème) version renvoie bien : Citation:
|
|
|
00
|
|
|
#9 | ||||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Autant pour moi Fred..
.. par contre cet exemple ne fonctionne pas Code :
Code :
)A part de la bidouille, personne n'a d'idée sur l'existence d'une fonction ou d'une extension qui extrairerais la partie PHP (idéalement qui permettrait d'identifier la ligne correspondante du fichier original)? |
||||
|
|
00
|
|
|
#10 | ||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 181 ![]() |
Attention à l'utilisation de get_token_all () - (Constaté sur WAMP, PHP 5.3.0)
1: les numéros de ligne bug Depuis PHP 5.2.2 token_get_all () doit retourner le nombre de ligne dans l'élément 2 .. .. mais par exemple (5.3.0 sur WAMP), il fonctionne parfaitement avec du code PHP (sans HMTL mélangé), mais si vous avez des T_INLINE_HTML détecté par token_get_all (), parfois, vous trouverez les numéros de ligne décalé (ligne suivante) ... 2: bug des messages d'alertes qui peuvent avoir un impact sur les boucles Attention l'analyse de code PHP non complet (ex: code php ligne par ligne): par exemple, si une balise de commentaire n'est pas fermé token_get_all (), les boucles peuvent être impacté par cet avertissement: Warning: Unterminated commentaire ligne de départ Ce problème ne semble pas se produire dans CLI mod (php en ligne de commande), mais seulement sur le Web mod. En attendant plus de stabilité, utiliser token_get_all () seulement sur du code PHP complet (avec les balise d'ouverture et de fermeture PHP incluse) :
3: Pourquoi n'y at-il pas la fonction d'extraire du code PHP (extrait de HTML, nous avons Tidy ..) ? En attendant, je propose donc ma fonction. Attention elle prend pas en charge: - les anciennes notations : <? ?> Et <% %> - Heredoc syntaxe - Nowdoc syntaxe (depuis PHP 5.3.0) Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com