使用php-js-ext在PHP内解析javascript脚本_PHP教程
项目主页 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后再次尝试编译。)
上一篇: Minor【 PHP框架】3.路由、控制器、视图,minor框架_PHP教程
下一篇: 正则表达式一
推荐阅读
-
解析PHP程序在Windows Azure内如何运行_PHP教程
-
使用php-js-ext在PHP内解析javascript脚本_PHP教程
-
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析,yii2pjax_PHP教程
-
解析在PHP中使用mysqli扩展库对mysql的操作_PHP教程
-
在Yii2中使用Pjax导致Yii2内联脚本载入失败的问题,yii2pjax_PHP教程
-
PHP mb_strwidth在实际使用中的问题解析_PHP教程
-
yii_wiki_394_javascript-and-ajax-with-yii (在yii 中使用 javascri_PHP教程
-
在PHP中使用FastCGI解析漏洞及修复方案,phpfastcgi_PHP教程
-
JSON进阶第一篇 在PHP与javascript 中使用JSON_PHP教程
-
解析PHP程序在Windows Azure内如何运行_PHP教程