使用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秒,看來執行效率是提高了不少。(出處:風閃網路學院)