程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 提高系統性能用eAccelerator優化PHP

提高系統性能用eAccelerator優化PHP

編輯:PHP綜合
為了更好的提高系統的性能,考慮對PHP再進行一些優化,前兩年接觸過MMCache和eAccelerator,尤其對eAccelerator非常喜歡,這次優化也選擇了它,下面整理一些文檔和大家分享。

一、eAccelerator介紹

1、背景
eAccelerator 是一個免費開源的PHP加速、優化、編譯和動態緩存的項目,它可以通過緩存PHP代碼編譯後的結果來提高PHP腳本的性能,使得一向很復雜和離我們很遠的PHP腳本編譯問題完全得到解決。通過使用eAccelerator,可以優化你的PHP代碼執行速度,降低服務器負載,可以提高PHP應用執行速度最高達10倍。

eAccelerator 項目誕生於2004年,當時它是作為 Turck MMCache 項目的一個分支提出並投入開發的。 Turck MMCache 由 Dmitry Stogov 開發,是個非常優秀的PHP內存緩存加速系統,如今仍然有很大部分 eAccelerator 的代碼應用到該項目中,目前該項目有很長時間沒有更新了,對於最新的PHP5.x的支持還未推出。

2、原理
eAccelerator 通過把經過編譯後的PHP代碼緩存到共享內存中,並在用戶訪問的時候直接調用從而起到高效的加速作用。它的效率非常高,從創建共享內存到查找編譯後的代碼都在非常短的時間內完成,對於不能緩存到共享內存中的文件和代碼,eAccelerator還可以把他們緩存到系統磁盤上。

eAccelerator 同樣還支持PHP代碼的編譯和解釋執行,你可以通過encoder.php腳本來對PHP代碼進行編譯達到保護代碼的目的,經過編譯後的代碼必須運行在安裝了eAccelerator的環境下。eAccelerator編譯後的代碼不能被反編譯,它不象其他一些編譯工具那樣可以進行反編譯,這將使得代碼更加安全和高效。

二、eAccelerator安裝配置

1、支持平台
由於aAccelerator提供了大部分基於共享內存的API,所以在*nix的平台上將得到更好的支持,雖然也發布了基於Windows平台的binary版本,但我在這裡就只提供基於*nix平台的配置和說明,目前可以支持的平台包括Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX en HP-UX。

2、系統要求
php4 or PHP5
autoconf
automake
libtool
m4
eAccelerator 只支持使用 mod_php 或者 fastCGI mode 安裝的PHP

3、安裝
先去eAccelerator官方下載最新版的源碼包:eaccelerator-0.9.5-beta.tar.bz2

#tar -zxvf ./eaccelerator-0.9.5.2.tar.bz2
#cd eaccelerator-0.9.5
#export PHP_PREFIX="/usr/local" (把PHP安裝目錄導入到環境變量,FreeBSD默認是/usr/local)
#$PHP_PREFIX/bin/PHPize
#./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/PHP-config
#make
#make install

4、ini文件配置
完成安裝後,eaccelerator.so模塊位於 /usr/lib/PHP/extensions目錄中,您的系統如果和我不一樣,您自己應該安裝在哪了(安裝時有顯示的);
查看使用的php.ini的路徑:PHP --ini
Linux-yxpi:/usr/local/Zend/etc # PHP --ini
Configuration File (PHP.ini) Path: /etc
Loaded Configuration File:         /usr/local/Zend/etc/PHP.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
(安裝zend時 自動把PHP.ini被放在了zend 目錄下)
下面開始配置PHP.ini文件,eAccelerator提供了兩種配置和調用方式,分別如下。

安裝為 Zend extension 模式,在PHP.ini文件中,加入;

zend_extension="/usr/local/lib/PHP/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/opt/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/apache2/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

注意:如果你已經安裝了Zend,那麼在 [Zend] 標記前加入以上代碼,否則zend Optimizer不起作用.

如果你使用了thread safe模式安裝的PHP,你必須使用 “zend_extension_ts” 替換第一行的 “zend_extension”.

安裝為 PHP extension 模式:(這是大部分采用的方式)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/opt/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/apache2/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

有關PHP.ini文件的詳細配置說明,請參照源碼目錄的README文檔或者訪問官方文檔:ini setting

完成安裝配置後,我們最後要創建緩存目錄

#mkdir /opt/eaccelerator
#chmod 777 /opt/eaccelerator
重起apache即可訪問.

5、驗證安裝結果
通過浏覽器訪問您的phpinfo()頁面或者運行 php -i 得到PHP配置信息,裡面如果看到類似下面的信息就表示安裝成功了。

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend TechnologIEs
   with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

我的機器上同時還安裝了Zend Optimizer3.0.1,所以看到的信息如下:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend TechnologIEs
   with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
   with Zend Extension Manager v1.0.10, Copyright (c) 2003-2006, by Zend TechnologIEs
   with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend TechnologIEs

如果你打開了eAccelerator的debug選項,可以從日志中看到類似下面的信息

#tail /var/log/httpd/eAccelerator_log
EACCELERATOR hit: "/var/www/toplee.com/blog/index.PHP"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-blog-header.PHP"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-config.PHP"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-settings.PHP"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.PHP"
...

以上信息表示文件都得到了緩存和命中。

至此,我們就完成了全部的安裝和配置,好好享受eAccelerator帶給你的驚喜吧,根據Michael的測試,效果的確相當的好。

三、在PHP中可以使用eAccelerator的API開發

1、API和文檔說明:

eAccelerator提供了便捷便捷而又穩定的本機緩存實現方式,由於大部分代碼實現基於共享內存,所以只能在*nix平台中使用,Windows平台Michael就暫時不知道何時有這方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源碼包的doc/PHP/目錄下)

文件列表:

cache.PHP
dasm.PHP
encoder.PHP
info.PHP
loader.PHP
session.PHP
shared_memory.PHP

接口列表:

array eaccelerator_cached_scripts ()
void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])
void eaccelerator_cache_page (string $key, [int $ttl = 0])
void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])
void eaccelerator_caching (boolean $flag)
void eaccelerator_clean ()
void eaccelerator_clear ()
array eaccelerator_dasm_file (mixed $filename)
mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])
void eaccelerator_gc ()
mixed eaccelerator_get (string $key)
array eaccelerator_info ()
array eaccelerator_list_keys ()
void eaccelerator_load ()
boolean eaccelerator_lock (string $key)
void eaccelerator_optimizer (boolean $flag)
void eaccelerator_purge ()
boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])
array eaccelerator_removed_scripts ()
boolean eaccelerator_rm (string $key)
void eaccelerator_rm_page (string $key)
boolean eaccelerator_set_session_handlers ()
boolean eaccelerator_unlock (string $key)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved