在PHP web应用程序中嵌入python/dsl脚本


Embed python/dsl for scripting in an PHP web application

我正在开发一个用PHP5编写的基于web的应用程序,这基本上是一个数据库之上的UI。为了给用户提供一个更灵活的工具,我想嵌入一种脚本语言,这样他们就可以做更复杂的事情,比如触发SQL查询、执行循环和将数据存储在变量中等等。在我的业务领域中,Python被广泛用于编写脚本,但我也在考虑创建一种简单的领域特定语言。脚本必须包装我现有的PHP类。

我正在寻求关于如何处理这个开发任务的建议?

更新:我将尝试在数据库中使用PostgreSQL中的PLPGSQL脚本。现在可以这样做,但我不能这样使用我的PHP类。Lua方法很有吸引力,似乎是我想要的(除了它不是Python)。

在客户机上编写脚本怎么样?这将确保最大的安全性,也节省服务器资源。

换句话说,Javascript将是您的脚本平台。您要做的是将后端功能公开为javascript函数。这取决于你的应用程序目前是如何编写的,可能需要后端工作或不需要。

哦,顺便说一下,对于实际语言,您不限于javascript。在谷歌上搜索"编译成javascript",第一键应该是你可以使用的语言列表。

如果您没有绑定到python,您可以使用例如Lua作为脚本语言。Lua是一种非常轻量级的语言,易于学习,并且在开发时考虑了嵌入。目前至少有两个PHP扩展可用,它们很好地将Lua嵌入到PHP中,从而提供了允许在应用程序的PHP和Lua部分之间进行访问的可能性。看一下:

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

这个也有一些很好的例子:

http://phplua.3uu.de/

我已经在一些简单的实验中使用了后者,它的效果相当好。

安全,安全,安全!我只是想把这事解决掉。你想要做的事听起来很可怕,但这是你的脚。

此外,你似乎要做的是混合两种不同的服务器端语言,除非有一个Python的实现,运行在PHP之上,我不知道(PHPython?)。

如果你愿意让你的PHP代码以某种方式调用Python,你应该能够很容易地做到这一点,像eval()或exec()。了解如何在运行时输入python代码并执行它?

至于包装PHP类,我不确定您能否完全完成。您可以用Python类镜像PHP类,并使用JSON之类的东西在两者之间传输数据。

我不知道任何预制解决方案。但是pypy,一个用RPython编写的Python实现,有一个沙箱功能,它允许你运行不受信任的代码。

但如果一些明显的DSL可以为您的领域设计,这可能是更简单的解决方案。

不用Python也可以,通过ie。解析用户输入的预定义"标签"并返回结果。

你有两个选择:

  1. 在前端使用MVC在PHP中执行逻辑
  2. 将逻辑推迟到后端

如果你在前端做你的逻辑,你可以看看PHP5 MVC框架,比如Zend

如果你推迟你的逻辑,你可以使用任何你喜欢的脚本语言。例如,可以使用SQLAlchemy和Python来访问数据库。