### 用 Zend Encode 编写开发 PHP 程序

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 秒，看来执行效率是提高了不少。