设为首页 收藏本站
查看: 643|回复: 0

[经验分享] 用ZendEncode编译PHP程序

[复制链接]

尚未签到

发表于 2017-3-23 11:58:54 | 显示全部楼层 |阅读模式
用ZendEncode编译PHP程序

作者:薛启康  时间:2004-04-11 23:37:03  来自:http://www.linuxforum.net  责任编辑:clc







一、ZendEncode的工作原理

使用PHP的人都知道,它是一个脚本编程工具,由它写的程序,必须以源码的形式放置在Web服务器上,所以我们无法保护自己的源代码。而且各位都知道任何一个脚本程序的执行效率同具有相同功能的编译好的二进制代码相比较,它的执行效率都是比较慢的。那么要是有一个工具能够帮我们把用php写的程序编译成二进制代码就好了,这样不但执行效率提高了,运行速度也加快了。真要是有这么一个工具,那就是一取两得了。

刚好,刚刚发布的ZendEncode就是为此而开发的。ZendEncode可以直接将脚本编译成二进制码。有了ZendEncode,你就可以将自己写好的php程序,编译后分发给很多用户,而用不着公开自己的源程序代码。编译好的二进制代码可以被zend Optimizer透明读取,也就是说,客户只要在他的服务器上安装Zend Optimizer就可以执行由ZendEncode编译好的php程序。编译程序中包含有Zend Optimizer的部分代码,所以编译过程中对程序代码进一步作了优化处理,这即意味着脚本的执行效率提高了。

从一定意义上讲,ZendEncode是一个“PHP编译器”。但是,它又不是一个真正意义上的编译器,真正意义上的编译器会脱离原来的编译环境运行,而ZendEncode编译过的程序,还要有ZendOptimizer的支持,就如同是编译好的java二进制代码,其要有一个JVM来运行。所以,ZendOptimizer又可以看作是php编译好代码的虚拟机。不管怎么说,就是这么一个东西,它们要通过相互配合使用。

目前ZendEncode支持的操作系统有:Solaris,Linux,FreeBSD及Windows。ZendEncode可以直接运行,你的系统中不一定非要安装php。

 

二、ZendEncode的安装 (本文以linux环境下的安装为例说明)

先去下载一个软件包吧!ZendEncode不是自由软件有,使用它要付费,而且价格相当高。幸好zend.com提供了一个可供试用的软件包,用户可以免费试用30天。这个软件包可以直接从http://www.zend.com上获得。所以,首先要到www.zend.com上下载ZendEncode、ZendOptimizer软件包。其次,要下载一个授权文件,也即license。由于ZendEncode是一个授权使用的产品,所以需要用户从zend.com上申请一个license。申请卡步骤如下:

要申请一个试用的license,需要向zend.com提供你正在使用的计算机的id,也即在申请页中所要填写的host ID(实际上就是你计算机上的网卡的MAC地址),查看计算机ID的方法如下:从zend.com下载一个lmutil.z的程序,解压后得到程序lmutil,运行它,会根据系统的硬件特征产生一个序列串。将些序列号填入到申请license页的hostid中,zend.com会在48小时内为用户生成一个license,下载此license文件,文件名为zendEncode.dat,它是唯一可以使用在你的计算机上。

1、  将ZendEncode软件包也解压缩在/usr/local/Zend目录下。解压缩完成后,目录下多了一个zendenc的文件,它就是那个“编译器”啦。

2、  将那个license文件复制到/usr/local/Zend目录下

安装完成。

三、ZendOptimizer的安装

完成了ZendEncode的安装,才完成了一半任务,要使用编译后的php二进制代码,还要安装一个解释器-ZendOptimizer,有了它的支持,编译后的php二进制文件才能被正确地执行。

与ZendEncode不同,ZendOptimizer是一个免费软件,它的主要功能是加速php脚本文件的运行,据Zend.com称,有了ZendOptimizer的优化,程序的执行效率可以提高600%,经过笔者的简单测试,执行效率的确是提高了不少。

安装ZendOptimizer步骤如下:

1、              解压缩zendOptimizer软件包,将zendOptimizer.so文件复制到/usr/local/Zend/lib目录中

2、              打开/usr/local/lib/php.ini文件,在文件中加入以下两行:

zend_optimizer.optimization_level=15

zend_extension=”/usr/local/Zend/lib/ZendOptimizer.so”

3、              重新启动Apache 服务器,使以上更新生效

 

四、ZendEncode的使用

好了,以上准备工作全部完成了,现在写一个简单的php脚本,使用zendEncode编译一下,看看效果如何,好,先写一个最简单的脚本,看看编译后的代码能不能执行:

#vi test.php



编译它:

#[iyunv@mail Zend]# ./zendenc test.php testencode.php 

Zend Encoder Unlimited (TEST DRIVE) v1.1.0 (c) Zend Technologies, 1999-2000

Licensed to: xqkred.

 

Compiling test.php...

Done encoding test.php.

Optimizing... Done.

Saving... Done.

好,成功编译。不过,编译好的程序大小较之以前要大很多。

将testencode.php复制到Web服务器的发布目录下,在浏览器上键入http://localhost/testencode.php,哇,编译后的代码可以成功运行了!由于我们使用是试用版的ZendEncode,所以,在页面的最上面会出现一个图片,说明,这是一个由ZendEncode试用软件包所产生的二进制文件。如下图所示:


购买了正式版的用户,上面的图示将不会再现。

下面再看看它的执行效率吧!,首先写一个小的计算程序粗略估计一下:compute.php


$t=time();

for( $i=0;$i<1000000;$i++) {

if(($i%20)!=0) {echo $i; echo ",";}

else { echo "
";} 

}

$t1=time();

echo "
"; echo "It used:"; echo  $t1-$t; echo " seconds";

?>

这个程序在执行时,取系统的时间,完成后再取系统时间,两个值的差即为整个程序运行所需时间,先在没有编译的情况下执行一遍,然后用ZendEncode编译后再执行一遍。相互比较结果:没有编译的情况下,运行所需时间平均为19秒,编译后的代码平均执行时间为 9秒,看来执行效率是提高了不少。

 

五、注意

由于php的开发速度很快,其版本号也更新的很快,如果你按照以上做法做了,但是,你的浏览器显示是一团乱码,那么说明,你的php和正在使用的ZendOptimizer版本不相匹配,只要重新下载相应的ZendOptimizer便可解决以上乱码问题。另外,要注意你下载的软件包的版本,在 linux环境下,有glibc及libc之分。Redhat 6以后的版本应该下载glibc类型的软件包。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354130-1-1.html 上篇帖子: PHP中的Magic Methods 下篇帖子: [转]PHP autoload机制详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表