在PHP中解释JavaScript

我希望能够运行JavaScript并获得PHP的结果,并想知道是否有一个PHP库,允许我parsing出来。 我的第一个想法是使用node.js,但由于node.js可以访问套接字,文件和东西,我想我宁愿避免这种情况。

理由:我在PHP中进行屏幕抓取,并遇到了很多情况,前端的JavaScript正在生成数据,我想避免编写专门的过滤函数在JavaScript上进行处理,因为需要很多时间。 更一般的情况是直接parsingJavaScript。

Downvoting:我真的不知道这个问题有什么争议,现在的networking爬虫已经知道了,唯一的区别是他们往往不会用PHP编写。 [1]

[1] http://blogs.forbes.com/velocity/2010/06/25/google-isnt-just-reading-your-links-its-now-running-your-code/

这是一个有趣的问题,对于潜在的使用案例来说,低调的选民正在缺乏想象力。 页面归档工具,打印脚本,预览图像 – 想要使用页面中包含的JavaScript处理文档的所有有效理由。

我不知道任何现有的PHP实现,但您可能可以将Mozilla的SpiderMonkey作为PHP模块,或者作为独立的工具来操作DOMDocument并返回结果。

我还没有使用服务器端JavaScript的经验,但我认为可能需要处理一些问题:

  • 主机对象(如documentwindow不是ECMAScript规范的一部分(这些是由实现浏览器提供的对象),所以您需要确保该库提供等效的主机对象。
  • 您可能在服务器端环境中执行客户端脚本时遇到安全问题。 这很像允许用户提交一个PHP脚本来评估,所以你需要确保安全沙箱是紧密的。

另一个(也许)更安全和更容易实现的选项可能是使用修改后的FireFox或WebKit实例作为浏览器运行,加载目标页面并将修改后的源代码返回给您的应用程序。

从PHP 5.3开始,您可以使用PHP的V8JS扩展 。 这是一个本地库,使用新的Google V8 Javascript引擎来执行JS并返回结果。

这很好,因为你可以通过PHP数组传递variables,并且解释得非常好

NodeJS(或其他一些谷歌的V8的衍生物)实际上可能是最好的方式去这里。 如果你关心的是nodejs可以做的各种事情(例如套接字等),你可以通过删除模块和/或插件来“去除它” – 我想即使内置的东西最终实现在这样一个它可以很容易地被剥离出来。

另一种方法可能是简单地从node.jsreplace,重写或移除require函数。

还有envjs应该可以使运行浏览器的js更容易运行。