PHP的嵌入式脚本语言?

时间:2009-07-28 15:27:05

标签: php javascript scripting embedded-language

我想知道是否有人知道可以嵌入到php中的一个很好的脚本语言? Javascript将是最喜欢的,虽然有几次尝试,他们要么太摇摇欲坠/慢/过时(phpjs,j4p5)或在共享主机(pecl spidermonkey)上起床和运行真的很痛苦。

背景是:我想有一种语言用于控制服务器上的php,但它也应该支持一些逻辑,所以yaml,xml或json还不够。我已经研究过LUA口译员和mediakwiki的“冬季”,但他们都要么依靠外部引擎,要么拥有强大的绑定功能。

pecl spidermonkey binding似乎是最完整的,你可以将vars,函数和整个对象注册到js-engine。有没有人知道任何可能接近我要找的系统或语言?

最好的

罗尔夫

3 个答案:

答案 0 :(得分:4)

我没有看到许多允许在PHP中启用其他脚本语言的引擎:-(
即使在PECL上,也似乎没有很多条目(例如,参见"languages" category:只有一个,你已经知道了)
在PEAR上,我甚至找不到符合你标准的东西......

我和Spidermonkey玩了一下(见this article on my blog,用法语),这很有趣,是的。但是几个月前我写这篇文章时并没有真正稳定 - 而且之后只有一些提交。所以,我理解为什么托管公司不会在他们的服务器上提供它...
即使我希望他们:非常好的允许非PHP开发人员为您的应用程序开发脚本!

但问题是:为什么你想要/需要另一种语言而不是PHP?

我的意思是你的服务器上已经安装了PHP,你很有经验,而且它是一种非常强大的语言...那你为什么要/需要使用别的东西?

使用PHP的eval,您甚至可以考虑执行“动态”PHP代码(是的,eval是eval以及所有这些,我知道^^)

如果你在Linux服务器上,使用诸如“exec”之类的东西的另一种选择是启动某种shell脚本;但我肯定更喜欢PHP中的编码而不是shell,我当然不是唯一的^^


无论如何,要密切关注你可能得到的答案,这也可能让我感兴趣; - )

答案 1 :(得分:2)

我理解你的担忧。即使对于受信任的来源,PHP也提供了比Web请求的整个环境所需的更多访问权限。即使脚本编写者是可信任的,即使他们只能通过脚本错误来伤害自己,更容易使用更有限的脚本环境,并且更容易支持。

你想要一些可以沙箱化的东西,它只能访问你明确分配给它的作用域的资源,并且在“在游戏中玩”运行时环境而不是在PHP自己的运行环境中执行。

一种方法是为用户提交的脚本使用Web模板语言。这些提供了一定量的控制(例如变量赋值),并关闭其他选项,例如,您无法编写无限循环。我在Java应用程序中使用Velocity用于此目的;我认为像Smarty这样的东西可能适用于PHP,但我没有直接使用它来实现这一目的。

另一种方法,如果脚本需要做的是由域约束,则实现域特定语言(DSL)。我在this answer中提到过。

除此之外,我不知道脚本语言的任何纯PHP实现。这是我自己感兴趣的东西。

答案 2 :(得分:0)

Symfony具有ExpressionLanguage组件:

  

ExpressionLanguage组件提供了可以编译的引擎   并评估表达式。表达式是返回一个   值(主要但不限于布尔值)。

     

...

     

该组件的目的是允许用户使用配置内部的表达式来实现更复杂的逻辑。对于某些示例,Symfony框架在安全性,验证规则和路由匹配中使用表达式。

以下是该语言的示例:

# Get the special price if
user.getGroup() in ['good_customers', 'collaborator']

# Promote article to the homepage when
article.commentCount > 100 and article.category not in ["misc"]

# Send an alert when
product.stock < 15
相关问题