在 PHP Web 应用程序中嵌入 python/dsl 以编写脚本
Posted
技术标签:
【中文标题】在 PHP Web 应用程序中嵌入 python/dsl 以编写脚本【英文标题】:Embed python/dsl for scripting in an PHP web application 【发布时间】:2011-09-23 11:36:48 【问题描述】:我正在开发一个用 php5 编写的基于 Web 的应用程序,它基本上是一个基于数据库的 UI。为了给用户一个更灵活的工具,我想嵌入一种脚本语言,这样他们就可以做更复杂的事情,比如触发 SQL 查询、循环和将数据存储在变量中等等。在我的业务领域,Python 被广泛用于脚本,但我也在考虑制作一种简单的领域特定语言。该脚本必须包装我现有的 PHP 类。
我正在寻求有关如何处理此开发任务的建议?
更新:我将尝试在 PostgreSQL 中使用 PLPGSQL 在数据库中编写脚本。现在可以这样做,但我不能以这种方式使用我的 PHP 类。 Lua 方法很有吸引力,似乎是我想要的(除了它不是 Python)。
【问题讨论】:
安全性?这将是一个 Web 应用程序吗? PHP 是一种很棒的脚本语言 .. 你为什么不能用它? @tandu:因为 PHP 不支持沙盒,这可能是我们想要的 【参考方案1】:如何在客户端上编写脚本。这将确保最大程度的安全性并节省服务器资源。
换句话说,javascript 将是您的脚本平台。您所做的是将后端的功能公开为 javascript 函数。取决于您的应用当前的编写方式,可能需要后端工作。
哦,顺便说一句,您不限于实际语言的 javascript。谷歌“编译为 javascript”,第一次点击应该是你可以使用的语言列表。
【讨论】:
【参考方案2】:如果你没有绑定到 python,你可以使用 Lua 作为脚本语言。 Lua 是一种非常轻量级的语言,易于学习,并且在开发时考虑了嵌入。已经至少有两个 PHP 扩展可用,它们很好地将 Lua 嵌入到 PHP 中,因此提供了允许在 PHP 和应用程序的 Lua 部分之间进行访问的可能性。看看:
http://pecl.php.net/package/lua
这个也有一些很好的例子:
http://phplua.3uu.de/
我已经在简单的实验中使用过后一种,效果很好。
【讨论】:
【参考方案3】:安全,安全,安全!只是想摆脱它。你似乎在尝试做的事情听起来很可怕,但这是你的脚射门。
此外,您似乎试图做的是混合两种不同的服务器端语言,除非有一个我不知道的在 PHP 之上运行的 Python 实现(PHPython?)。
如果您愿意让您的 PHP 代码以某种方式调用 Python,您应该可以使用 eval() 或 exec() 之类的方法轻松完成此操作。见how to input python code in run time and execute it?
至于包装您的 PHP 类,我不确定您是否能完全做到这一点。您可以使用 Python 类镜像您的 PHP 类,并使用 JSON 之类的东西在两者之间传输数据。
【讨论】:
有 PIP csh.rit.edu/~jon/projects/pip 旨在将 php 类包装在 python 中,但它看起来不是一个非常活跃的项目。 大声笑,我应该知道它在某个地方。【参考方案4】:我不知道任何预制解决方案。但是pypy,一个用 RPython 编写的 Python 实现,有一个sandboxing 特性,可以让你运行不受信任的代码。
但如果可以为您的域设计一些明显的 DSL,那可能是更简单的解决方案。
【讨论】:
【参考方案5】:你可以在没有 Python 的情况下做到这一点,通过 ie。解析用户输入的预定义“标签”并返回结果。
【讨论】:
【参考方案6】:你有两个选择:
-
使用 MVC 在前端的 PHP 中执行逻辑
将您的逻辑推迟到后端
如果你在前端做你的逻辑,你可以看看 PHP5 MVC 框架,比如Zend
如果您要推迟您的逻辑,您可以使用任何您喜欢的脚本语言。例如,您可以在 Python 中使用SQLAlchemy 来访问您的数据库。
【讨论】:
以上是关于在 PHP Web 应用程序中嵌入 python/dsl 以编写脚本的主要内容,如果未能解决你的问题,请参考以下文章