2011-09-23 10 views
11

Estoy desarrollando una aplicación web escrita en PHP5, que básicamente es una IU en la parte superior de una base de datos. Para darles a los usuarios una herramienta más flexible, quiero incorporar un lenguaje de scripting, para que puedan hacer cosas más complejas como enviar consultas SQL, hacer bucles y almacenar datos en variables, etc. En mi dominio de negocios, Python es ampliamente utilizado para scripts, pero también estoy pensando en crear un lenguaje específico de dominio simple. La secuencia de comandos tiene que envolver mis clases de PHP existentes.Incrustar python/dsl para crear scripts en una aplicación web PHP

Estoy buscando asesoramiento sobre cómo abordar esta tarea de desarrollo?

Actualización: Intentaré crear scripts en la base de datos usando PLPGSQL en PostgreSQL. Esto funcionará por ahora, pero no puedo usar mis clases de PHP de esta manera. El enfoque de Lua es atractivo y parece que es lo que quiero (además de que no es Python).

+0

Seguridad? ¿Va a ser una aplicación web? –

+1

PHP es un maravilloso lenguaje de scripts ... ¿por qué no puedes usar eso? –

+0

@tandu: porque PHP no admite sandboxing, que es probablemente lo que se desea – aurora

Respuesta

2

Si no está obligado a Python, podría utilizar, por ejemplo, Lua como lenguaje de scripting. Lua es un lenguaje muy liviano, fácil de aprender y desarrollado teniendo en cuenta la incrustación. Ya hay al menos dos extensiones de PHP disponibles, que incrustan muy bien Lua en PHP y, por lo tanto, ofrecen la posibilidad de permitir el acceso entre PHP y Lua como parte de su aplicación.Echar un vistazo a:

http://pecl.php.net/package/lua

Ésta también tiene algunos buenos ejemplos:

http://phplua.3uu.de/

que ya ha utilizado este último un poco de experimentos sencillos y funciona bastante bien.

0

Puede hacerlo sin Python, es decir. analizar la entrada del usuario para "etiquetas" predefinidas y devolver el resultado.

1

Seguridad, seguridad, seguridad! Solo quería sacar eso del camino. Lo que parece que estás tratando de hacer suena bastante aterrador, pero es tu pie para disparar.

Además, lo que parece que intenta hacer es mezclar dos idiomas del lado del servidor a menos que haya una implementación de Python que se ejecute sobre PHP de la que no tengo conocimiento (PHPython?).

Si está dispuesto a que su código PHP invoque a Python de alguna manera, debería poder hacer esto fácilmente con algo como eval() o exec(). Ver how to input python code in run time and execute it?

En cuanto a envolver tus clases de PHP, no estoy seguro de que puedas lograr eso exactamente. Podría duplicar sus clases de PHP con clases de Python y usar algo como JSON para transportar los datos entre los dos.

+0

Hay PIP http://www.csh.rit.edu/~jon/projects/pip/ que tiene como objetivo envolver las clases de php en python, pero parece que no es un proyecto muy activo. –

+0

LOL, debería haber sabido que estaba en algún lado. – ThatAintWorking

0

tiene dos opciones:

  1. Haga su lógica en PHP en la interfaz utilizando un MVC
  2. Defer su lógica para el backend

Si usted está haciendo su lógica en el frontend, puede buscar en un framework PHP5 MVC, como Zend

Si está postergando su lógica, puede usar cualquier lenguaje de scripts que desee. Por ejemplo, puede usar SQLAlchemy con Python para acceder a su base de datos.

3

¿Qué le parece hacer los scripts en el cliente. Eso garantizará la máxima seguridad y también ahorrará recursos del servidor.

En otras palabras, Javascript sería su plataforma de scripting. Lo que haces es exponer la funcionalidad de tu backend como funciones de JavaScript. Dependiendo de cómo está escrita actualmente su aplicación que podría requerir un trabajo de back-end o no.

Ah, y por cierto no está limitado a javascript para el idioma real. Google "compile to javascript" y el primer hit debería ser una lista de idiomas que puede usar.

1

No conozco ninguna solución prefabricada. Pero pypy, una implementación de Python escrita en RPython, tiene una característica sandboxing, que le permite ejecutar el código que no es de confianza.

Pero si se puede diseñar un DSL obvio para su dominio, esa podría ser la solución más fácil.

Cuestiones relacionadas