2010-01-10 2 views
-1

Si j'avais du code PHP dans la base de données, est-ce que je pourrais "inclure" ça en PHP et l'exécuter? Eh bien, bien sûr que je pourrais écrire un fichier avec ce contenu et juste inclure ce fichier, mais peut-être que PHP a quelque chose de similaire à eval() de JavaScript?Est-il possible de charger un code PHP d'exécution hors de la base de données?

+5

Question qui prend en réalité 2 secondes pour trouver la réponse sur google. Est-ce que les gens ont vraiment été si paresseux? – LukeP

+0

Donc vous avez la réponse et ne l'avez pas posté? Qui est paresseux? Plusieurs fois, une recherche Google affiche StackOverflow avec la réponse. Je me demande comment la réponse est arrivée là ... – defines

+0

@Dustin: J'ai googlé pour php eval et j'ai obtenu une page de manuel php avant de poster il y avait déjà 4 réponses ici. – LukeP

Répondre

5

Oui, PHP a également eval(), mais il est considéré comme une très mauvaise pratique de l'utiliser.

This question discute bien les points majeurs, sans le condamner totalement.

Le plus souvent, si eval() apparaît, il est utile de jeter un coup d'œil sur le programme que vous construisez: Il y a probablement une meilleure façon de le faire. Par exemple, si vous souhaitez remplir des valeurs de données dans du code HTML stocké dans une base de données, un moteur de création de modèles peut être une meilleure idée.

+0

Oui. @OP, ne manquez pas la réponse de Roland Bouman ci-dessous, avertissant que votre autre solution proposée a tous les mêmes problèmes que 'eval()'. – grossvogel

0

Il existe eval() pour PHP. Mais s'il vous plait, ne l'utilisez jamais! : D

0

Vous pouvez évaluer un code en utilisant la fonction eval - mais il est généralement considéré comme une mauvaise pratique, et un peu dangereux, pour l'utiliser.

(Eh bien, en fait, c'est le même nom de fonction que dans Javascript ;-) - et c'est une mauvaise pratique dans les deux langues - quelle coïncidence; ou non)


Une autre solution qui est parfois utilisée consiste à:

  • ont votre code PHP dans une base de données
  • vient le chercher parfois (pas à chaque fois) et le stocker dans un fichier, utilisé comme la mise en cache de mécanisme
  • include ce fichier - qui sera exécuté

Je l'ai vu quelques-uns prett y vieux CMS fonctionnent de cette façon, par exemple ... Mais notez qu'ils utilisent principalement des fichiers comme cache (Pour ne pas faire trop de demandes à la base de données) - même si cela a très bien fonctionné.

1

Notez que l'utilisation eval() mais écrire un fichier à partir du db et y compris qui auront exactement le même risque de sécurité que ... le point est pas tant à eval() ou non eval() le problème est le suivant: si quelqu'un hacks dans votre base de données, et a la possibilité de modifier le code PHP? Je serais capable d'avoir votre serveur exécuter leur script PHP, et faire ce qu'ils veulent.

0

Qu'en est-il de l'utilisation du cache de fichiers? Vous pouvez toujours stocker le code PHP temporairement dans le fichier et l'inclure. Logique simple avec génération de fichier, stockage dans le cache, y compris le fichier correct et l'actualisation des anciens fichiers (checksum md5 + cache de fichier fait timestamp + timestamp de modification). Il suffit ensuite de comparer les deux horodatages pour savoir si la mise à jour du cache est nécessaire.

Questions connexes