专栏首页源码之家使用php-js-ext在PHP内解析javascript脚本

使用php-js-ext在PHP内解析javascript脚本

当你在因个人兴趣爱好而开发PHP程序时,面对可以达到你的目的却长达千行以上的js脚本,你有精力去用php重写它么?想用PHP模拟用户行为么?但却遇到js泛滥的站点……一个不为人所知的php扩展项目可以满足这些需求,这个扩展的目的就是在php内解释javascript。

项目主页 http://aurore.net/projects/php-js/

php-js-ext是mozilla javascript解释器和php之间的一座桥梁,因此我们除了需要下载最后版本为0.1.2的php-js-ext,还需要下载最新版本为1.7.0的mozilla js,链接如下(php-js-ext 0.1.2发布时是配合js-1.5工作,但经我测试,也可以配合js-1.7工作)

wget http://aurore.net/projects/php-js/php-js-ext-0.1.2.tar.bz2 wget http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz

系统是CentOS 4.5 1.安装mozilla js 解开js-1.7.0.tar.gz

tar zxvf js-1.7.0.tar.gz cd js/src

开始编译(如不能完成编译见最后说明)

make -f Makefile.ref

拷贝libjs.so到/usr/lib

cp Linux_All_DBG.OBJ/libjs.so /usr/lib ldconfig

拷贝头文件到/usr/include

cp jsapi.h jscompat.h jslong.h jsosdep.h jsotypes.h jspubtd.h jstypes.h jsproto.tbl jsconfig.h Linux_All_DBG.OBJ/jsautocfg.h /usr/include/

自此mozilla js的安装工作就完成了,下面开始进行php-js-ext的安装

2.安装php-js-ext 解开php-js-ext-0.1.2.tar.bz2

tar jxvf php-js-ext-0.1.2.tar.bz2 cd php-js-ext-0.1.2

创造环境并设定扩展版本(如有一个以上的php存在,需要输入phpize的完整路径)

/path/phpize

配置并编译安装(如有一个以上的php存在或configure无法找到php的位置,需要在configure的时候指定-with-php-config=/path/php-config)

./configure make && make install

如果一切无误,js.so已经在你的php的lib目录

最后,修改你的php.ini,在相应的位置加入extension=js.so,并确认extension_dir的设定正确。 输出一个phpinfo的结果,以查看js.so是否被正确加载和可能的错误信息。 如果一切无误的话,我们就可以开始使用这个功能了。

这里附上官方网站的使用说明:

A simple ./configure; make; make install should do the trick. Make sure to add an extension=js.so line to your php.ini/php.d. Note: you need to install libjs first. If you're using a Redhat-esque system, you can use the SRPM provided above, else, use the TBZ.

Then, just use js_eval to evaluate your JavaScript. js_eval returns the value returned by the JavaScript interpreter to PHP.

For example:

js_eval("var a = 123;"); js_eval("var b = 456;");

$c = js_eval("[a, b];"); echo "a is ".$c[0]."\n"; echo "b is ".$c[1]."\n";

js_eval("var sum = function(x, y) { return x + y; }");

$d = js_eval("sum(a, b);"); echo "The sum of a and b is ".$d."\n";

Would produce:

a is 123 b is 456 The sum of a and b is 579

js_eval takes an optional boolean argument, assoc, which returns objects as associative arrays instead of PHP objects.

The php-js execution environment provides two built-in JavaScript system functions:

* print * gc

print outputs its argument to the php output stream.

gc forces garbage collection within the JavaScript environment.

(非Redhat的linux发行版可能会在mozilla js的编译过程中产生错误,是因为连接器和内核已经不对a.out提供支持,我们需要用gcc来生成一个共享库而不是ld了。打开js/src/config/Linux_All.mk,将第50行的 MKSHLIB = $(LD) -shared $(XMKSHLIBOPTS) 更改为 MKSHLIB = $(CC) -shared $(XMKSHLIBOPTS) ,make -f Makefile.ref clean后再次尝试编译。)

转载时请保留作者信息,谢谢。

附:文件找不到可以上这里找:

ftp://193.105.142.100/pub/FreeBSD/ports/local-distfiles/chinsan/php-js-ext-0.1.2.tar.bz2

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 巧解“很抱歉,本域名以被锁定,请与客服联系!”

    用户1272546
  • 解决 SF.NET 安装 Discuz! 缓存问题

    用户1272546
  • 让phpStudy在windows下也支持伪静态规则文件

    用户1272546
  • webpack多入口多出口的实现

    对古老的网站进行维护, 短时间内用react或vue组件化重写全部页面不太现实,但用webpack做个打包, 还是可行性的, 配置好webpack多入口多出口,...

    zhaoolee
  • 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    你最喜欢用什么工具来编写机器学习模型?数据科学家们对这个永恒的问题会给出各种不同的答案。一些人喜欢RStudio,另一些人更喜欢Jupyter Notebook...

    大数据文摘
  • Webpack第三天

    我们已经能打包能启动了,现在我们要继续开发。开发的时候我们要一直刷新才能出现,这很浪费时间,而webpack自带了热更新。

    wade
  • JavaScript常用对象&属性&事件-图标

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 如何动态加载js?

    第三方的js文件,自己写的js文件,js越来越多了怎么办? 提出问题: 1、js文件太多了,每个页面都写<script src="...">太麻烦。 2、如果路...

    用户1174620
  • 前端缓存

    https://juejin.im/post/5a098b5bf265da431a42b227

    城市中的游牧民族
  • 17.12.4日报

    1,找到http://www.xinhuanet.com 图片显示不了的原因,curl没打开zip宏

    龙泉寺扫地僧

扫码关注云+社区

领取腾讯云代金券