php中编译js,php中运行JS

第一种方法 利用windows的com组件解析js

$oScript = new COM("MSScriptControl.ScriptControl");

$oScript->Language = "JavaScript";

$oScript->AllowUI = false;

$oScript->AddCode("function s(x){return x * x;}");

$a=$oScript->Run("s", "3");

echo $a; // 9

$oScript = new COM("MSScriptControl.ScriptControl");

$oScript->Language = "JavaScript";

$oScript->AllowUI = false;

$oScript->AddCode("function s(x){return x * x;}");

$a=$oScript->Run("s", "3");

echo $a; // 9

这样做有两个问题

1,只能在windows环境下执行

2,MSScriptControl只支持两种脚本语言 一是VBScript。二是JScript,而JScript和JavaScript是有区别的

以下介绍另一种方法

第二种方法 php-js-ext

项目主页 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

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

1.安装mozilla js

解开js-1.7.0.tar.gz

tar zxvf js-1.7.0.tar.gz

cd js/src

tar zxvf js-1.7.0.tar.gz

cd js/src

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

make -f Makefile.ref

make -f Makefile.ref

拷贝libjs.so到/usr/lib

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

ldconfig

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/

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

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

/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.

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后再次尝试编译。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值