用Zend Encode编写开发PHP程序


Posted in PHP onFebruary 21, 2010

Zend Encode的工作原理
使用PHP的人都知道,它是一个脚本编程工具,用它写的程序,必须以源码的形式放置在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天。这个软件包可以直接从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服务器的发布目录下,在浏览器上键入localhost/testencode.PHP,哇!编译后的代码可以成功运行了!由于我们使用是试用版的Zend Encode,所以,在页面的最上面会出现一个图片,说明这是一个由Zend Encode试用软件包所产生的二进制文件。正式版的软件中,图片将不会再现。
下面再看看它的执行效率吧!首先写一个小的计算程序粗略估计一下:
[compute.PHP]

<? 
r=time(); 
for( 121=0;121<1000000;121++) { 
if((121%20)!=0) {echo 121; echo “,”;} 
else { echo “<br>”;} 
} 
=time(); 
echo “<br>”; echo “It used:”; echo -r; echo ” seconds”; 
?>

这个程序在执行时,取系统的时间,完成后再取系统时间,两个值的差即为整个程序运行所需时间,先在没有编译的情况下执行一遍,然后用Zend Encode编译后再执行一遍。比较结果:没有编译的情况下,运行所需时间平均为19秒,编译后的代码平均执行时间为9秒,看来执行效率是提高了不少。
PHP 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
php中对xml读取的相关函数的介绍一
Jun 05 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
php使用json_encode对变量json编码
Apr 07 PHP
memcache一致性hash的php实现方法
Mar 05 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
PHP 学习路线与时间表
Feb 21 #PHP
php 高效率写法 推荐
Feb 21 #PHP
php 魔术函数使用说明
Feb 21 #PHP
php microtime获取浮点的时间戳
Feb 21 #PHP
PHP+ajax 无刷新删除数据
Feb 20 #PHP
php 读取文件乱码问题
Feb 20 #PHP
判断是否为指定长度内字符串的php函数
Feb 16 #PHP
You might like
php xml文件操作实现代码(二)
2009/03/20 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
基于jquery实现表格无刷新分页
2016/01/07 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
深入理解Python中的内置常量
2017/05/20 Python
详解python基础之while循环及if判断
2017/08/24 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
铭立家具面试题
2012/12/06 面试题
团队精神演讲稿
2013/12/31 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
python实现图片批量压缩
2021/04/24 Python
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
Python 中的 copy()和deepcopy()
2021/11/07 Python