我正在开发一个用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。解析用户输入的预定义"标签"并返回结果。
你有两个选择:
- 在前端使用MVC在PHP中执行逻辑
- 将逻辑推迟到后端
如果你在前端做你的逻辑,你可以看看PHP5 MVC框架,比如Zend
如果你推迟你的逻辑,你可以使用任何你喜欢的脚本语言。例如,可以使用SQLAlchemy和Python来访问数据库。