用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 相关文章推荐
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 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 CURL获取邮箱地址的详解
2013/06/03 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
Python简单日志处理类分享
2015/02/14 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
django中cookiecutter的使用教程
2020/12/03 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
师范院校学生自荐信范文
2013/12/27 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
白鹤梁导游词
2015/02/06 职场文书
离婚案件原告代理词
2015/05/23 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书