2009-12-29 5 views
0

J'essaie d'exécuter du code PHP en XML Ci-dessous le code est-il meilleur pour l'exécution car nous utilisons eval et autant que je sache, il dégrade les performances de 80-85% comme il est censé être utilisé par le navigateurIntégrer PHP en XML

function processing_instruction($inParser, $inTarget, $inCode) { 
if ($inTarget === 'php') { 
eval($inCode); 
} 
} 
+0

Soyez très prudent avec 'eval();' - sérieusement. – Sampson

+0

yup c'est vrai ... – Josh

+0

Eval n'est pas fait par le navigateur, il est fait par le serveur - mais il est très dangereux, sauf si vous faites absolument confiance à votre entrée. –

Répondre

1

"Si eval() est la réponse, vous êtes certainement poser la mauvaise question."
-Rasmus Lerdorf, BDFL de PHP


Est-ce le code que vous utilisez si varié qu'il ne peut pas être décidée comme une série de fichiers à inclure ou à la demande d'un style XML-RPC appel de fonction? Il y a généralement très peu à gagner en permettant l'exécution de code arbitraire, et c'est avant que vous considériez le montant stupéfiant que vous pourriez perdre.

S'il y a un nombre fini, prévisible de choses que ces fichiers pourraient faire, je fortement recommande de prendre le temps de créer une interface semi-générique XML-RPC (ou au moins une série de fichiers que vous pourriez spécifiez dans le fichier XML, puis incluez-le à la volée, peut-être après avoir défini certaines variables d'environnement, en fonction de votre style de codage) et en l'utilisant.

Le nombre de risques que vous prenez lors de la création d'un portail à eval() est presque innombrable.

J'avais envisagé de fournir quelques exemples ici, mais XML-RPC ought to be a well enough known concept que mon action est tout à fait inutile.

0

eval() est malheureusement le seul moyen de l'exécuter.

à moins que ...

Si le code dans le fichier XML est exécuté plus d'une fois. par exemple, vous avez un ensemble de 6 fichiers Xml qui contiennent du code, un peu comme un système de plugin.

Si c'est le cas, vous pouvez lire le code sur le fichier XML, l'écrire dans un fichier .php, puis l'inclure. Ce serait plus lent, mais si vous faites cela, vous n'avez qu'à le faire une fois par fichier XML. Après cela, vous pouvez simplement exécuter les fichiers PHP purs.

Et, oui, comme tout le monde dit d'autre, vous ne pouvez pas faire confiance à un code peu fiable (duh)

0

Pour comprendre l'utilisation de "Embedding PHP en XML" voir http://code.google.com/p/smallest-php-xml-xsl-framework/

Il est une application complète avec XML + PHP (PHP générant XML) et XSLT comme système de template. Dans une architecture MVC, le XML + PHP fait le "traitement du modèle MVC" et XSLT le MVC-View.