用Zend Encode编写开发PHP程序


Posted in PHP onOctober 09, 2006

使用PHP的人都知道,Zend Encode是一个脚本编程工具,用它写的程序,必须以源码的形式放置在Web服务器上,所以我们无法保护自己的源代码。大家都知道任何一个脚本程序的执行效率同具有相同功能的编译好的二进制代码相比较,它的执行效率都是比较低的。那么要是有一个工具能够帮我们把用PHP写的程序编译成二进制代码就好了,这样不但执行效率提高了,运行速度也加快了。真要是有这么一个工具,那就是一举两得了。
现在这不是梦想了,Zend Encode就是为此而开发的,它可以直接将脚本编译成二进制码。有了Zend Encode,你就可以将自己写好的PHP程序,编译后分发给很多用户,而用不着公开自己的源程序代码。编译好的二进制代码可以被Zend Optimizer透明读取,也就是说,客户只要在他的服务器上安装Zend Optimizer就可以执行由Zend Encode编译好的PHP程序。编译程序中包含有Zend Optimizer的部分代码,所以编译过程中对程序代码进一步作了优化处理,这即意味着脚本的执行效率提高了。
从一定意义上讲,Zend Encode是一个“PHP编译器”。但是,它又不是一个真正意义上的编译器,因为真正编译完成的程序可以脱离原来的编译环境运行,而Zend Encode编译过的程序,需要有Zend Optimizer的支持。就像编译好的Java二进制代码,需要JVM的支持。所以,Zend Optimizer可以看作是PHP编译好代码的虚拟机。不管怎么说,它们要通过相互配合使用。
目前Zend Encode支持的操作系统有:Solaris、Linux、FreeBSD及Windows。Zend Encode可以直接运行,电脑系统中不一定非要安装PHP。
Zend Encode的安装
先去下载一个软件包吧!Zend Encode不是自由软件,使用它要付费,而且价格相当高。幸好zend.com提供了一个可供试用的软件包,用户可以免费试用30天。这个软件包可以直接从http://www.zend.com上获得。所以,首先要到www.zend.com上下载Zend Encode、Zend Optimizer软件包。其次,要下载一个授权文件license。由于Zend Encode是一个授权使用的产品,所以需要用户从zend.com上申请一个license。申请步骤如下:
要申请一个试用的license,需要向zend.com提供你正在使用的计算机的ID,也即在申请页中填写host ID(实际上就是你计算机上的网卡的MAC地址)。查看计算机ID的方法如下:从zend.com下载一个lmutil.z的程序,解压后得到程序lmutil,运行它,它会根据系统的硬件特征产生一个序列串。将这个序列号填入到申请license页的host ID中,zend.com会在48小时内为用户生成一个license,下载此license文件,文件名为zendEncode.dat,它只能在这台电脑上使用。
1.将Zend Encode软件包也解压缩到/usr/local/Zend目录下。解压缩完成后,目录下多了一个zendenc的文件,它就是那个“编译器”啦。
2.将那个license文件复制到/usr/local/Zend目录下安装完成。
Zend Optimizer的安装
完成了Zend Encode的安装,才完成了一半任务,要使用编译后的PHP二进制代码,还要安装一个解释器——Zend Optimizer,有了它的支持,编译后的PHP二进制文件才能被正确地执行。
与Zend Encode不同,Zend Optimizer是一个免费软件,它的主要功能是加速PHP脚本文件的运行。据Zend.com称,有了Zend Optimizer的优化,程序的执行效率可以提高600%,经过笔者的简单测试,执行效率的确是提高了不少。
安装Zend Optimizer步骤如下:
1.解压缩Zend Optimizer软件包,将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 服务器,使以上更新生效。
Zend Encode的使用
现在准备工作全部完成了,我们写一个简单的PHP脚本,使用Zend Encode编译一下,看看效果如何。先写一个最简单的脚本,看看编译后的代码能不能执行:
#vi test.PHP
<? Phpinfo(); ?>
编译它:
#[root@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,哇!编译后的代码可以成功运行了!由于我们使用是试用版的Zend Encode,所以,在页面的最上面会出现一个图片,说明这是一个由Zend Encode试用软件包所产生的二进制文件。正式版的软件中,图片将不会再现。
下面再看看它的执行效率吧!首先写一个小的计算程序粗略估计一下:
[compute.PHP]
<?
$t=time();
for( $i=0;$i<1000000;$i++) {
if(($i%20)!=0) {echo $i; echo ",";}
else { echo "<br>";}
}
$t1=time();
echo "<br>"; echo "It used:"; echo $t1-$t; echo " seconds";
?>
这个程序在执行时,取系统的时间,完成后再取系统时间,两个值的差即为整个程序运行所需时间,先在没有编译的情况下执行一遍,然后用Zend Encode编译后再执行一遍。比较结果:没有编译的情况下,运行所需时间平均为19秒,编译后的代码平均执行时间为 9秒,看来执行效率是提高了不少。(出处:风闪网路学院)

PHP 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
教你如何把一篇文章按要求分段
Oct 09 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
Dec 25 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
php输出文字乱码的解决方法
Oct 04 PHP
在php中使用sockets:从新闻组中获取文章
Oct 09 #PHP
15个小时----从修改程序到自己些程序
Oct 09 #PHP
用PHP编程开发“虚拟域名”系统
Oct 09 #PHP
在Windows中安装Apache2和PHP4的权威指南
Oct 09 #PHP
自定义PHP分页函数
Oct 09 #PHP
用PHP实现WEB动态网页静态
Oct 09 #PHP
用libtemplate实现静态网页生成
Oct 09 #PHP
You might like
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
Python发展史及网络爬虫
2019/06/19 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
python的数学算法函数及公式用法
2020/11/18 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
感恩之星事迹材料
2014/05/03 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
2015年实习单位评语
2015/03/25 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python