首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 加速利器:eAccelerator 安裝配置與使用全攻略

     編輯:PHP 綜合知識

前言

近期完成伺服器從 FreeBSD 4.10 升級至 6.1,並將 PHP 更新至 5.1.4、Apache 升級至 2.2 版。為進一步提升系統效能,決定對 PHP 進行深度優化。早年曾接觸 MMCache 與 eAccelerator,對後者印象深刻,故此次優化首選 eAccelerator。本文整理相關文檔與實戰經驗,供大家參考。

一、eAccelerator 簡介

1. 發展背景

eAccelerator 是一套免費開源的 PHP 加速、優化、編譯與動態快取專案。它透過快取 PHP 代碼編譯後的 opcode,大幅提升腳本執行效率,最高可達 10 倍加速,同時降低伺服器負載。專案於 2004 年從 Turck MMCache 分支發展而來,後者由 Dmitry Stogov 開發,曾是極優秀的 PHP 記憶體快取加速系統。隨著 MMCache 長期停止更新、不支援 PHP 5.x,eAccelerator 繼承其核心代碼並持續維護,成為主流選擇。

2. 運作原理

eAccelerator 將編譯後的 PHP 代碼存入共享記憶體,請求到來時直接調用,省去重複編譯開銷。從建立共享記憶體到查找 opcode 皆在極短時間完成。對於無法存入共享記憶體的文件,可回退至磁碟快取。此外,eAccelerator 內建編碼器,可透過 encoder.php 將 PHP 代碼編譯為不可逆的二進制格式,保護原始碼安全,編譯後的代碼需在安裝 eAccelerator 的環境下執行。

二、安裝與配置實戰

1. 支援平台

eAccelerator 依賴共享記憶體 API,在 *nix 平台(Linux、FreeBSD、OpenBSD、Mac OS X、Solaris、AIX、HP-UX)表現最佳。雖有 Windows 版本,但本文專注 *nix 環境配置。

2. 系統需求

  • PHP 4 或 PHP 5
  • autoconf、automake、libtool、m4
  • PHP 必須以 mod_php 或 fastcgi 模式安裝

3. 編譯安裝步驟

# 下載最新源碼包(以 0.9.5-beta2 為例)
wget https://eaccelerator.net/eaccelerator-0.9.5-beta2.tar.bz2
tar -jxvf eaccelerator-0.9.5-beta2.tar.bz2
cd eaccelerator-0.9.5-beta2

# 設定 PHP 安裝路徑(FreeBSD 預設 /usr/local)
export PHP_PREFIX="/usr/local"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make && make install

4. php.ini 關鍵配置

eAccelerator 提供兩種載入模式,PHP extension 模式為常用方式:

; 載入擴展
extension="eaccelerator.so"

; 核心參數
eaccelerator.shm_size="16"           ; 共享記憶體大小(MB)
eaccelerator.cache_dir="/tmp/eaccelerator" ; 磁碟快取目錄
eaccelerator.enable="1"              ; 啟用加速
eaccelerator.optimizer="1"           ; 啟用優化器
eaccelerator.check_mtime="1"         ; 檢查文件修改時間
eaccelerator.debug="0"               ; 關閉除錯
eaccelerator.log_file="/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""               ; 過濾規則(空為全部快取)
eaccelerator.shm_max="0"             ; 最大快取文件大小(0=不限)
eaccelerator.shm_ttl="0"             ; 快取存活時間(0=永久)
eaccelerator.shm_prune_period="0"    ; 清理週期(0=不自動清理)
eaccelerator.shm_only="0"            ; 是否僅用共享記憶體
eaccelerator.compress="1"            ; 啟用壓縮
eaccelerator.compress_level="9"      ; 壓縮等級(1-9)
注意:若 PHP 為 thread-safe 版本,請將 zend_extension 改為 zend_extension_ts。

配置完成後,建立快取目錄並設定權限:

mkdir /tmp/eaccelerator
chmod 777 /tmp/eaccelerator

5. 驗證安裝成果

瀏覽 phpinfo() 頁面或執行 php -i,若輸出包含 with eAccelerator v0.9.5-beta2 字樣即表示成功。若同時安裝 Zend Optimizer,兩者可共存,輸出會同時顯示兩者版本資訊。

開啟 eaccelerator.debug=1 後,日誌會記錄快取命中情況:

EACCELERATOR hit: "/var/www/example.com/index.php"
EACCELERATOR hit: "/var/www/example.com/config.php"
...

三、開發應用:eAccelerator API 實戰

1. 核心 API 介紹

eAccelerator 提供豐富的本地快取 API(基於共享記憶體,僅限 *nix),主要介面文件位於源碼包 doc/php/ 目錄:

  • cache.php、dasm.php、encoder.php、info.php、loader.php、session.php、shared_memory.php

常用函數包括:

2. 代碼範例:物件快取與計數器

<?php
class TestCache {
    public $pro = 'hello';
    public function __construct() { echo "Object Created!<br>\n"; }
    public function func() { echo ', the world!'; }
    public function now($t) { echo date('Y-m-d H:i:s', $t); }
}

$tt = eaccelerator_get("test_tt");
if (!$tt) {
    $tt = new TestCache;
    eaccelerator_put("test_tt", $tt);
    echo "no cached!<br>\n";
} else {
    echo "cached<br>\n";
}

echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>

3. 實戰案例:vBulletin 整合

知名論壇系統 vBulletin 3.6 Beta 已內建 eAccelerator 支援,其數據存取類 vB_Datastore_eAccelerator 示範如何利用 eaccelerator_get/put/lock/unlock 實現高效資料快取與併發控制,極具參考價值。

四、知名站點應用見證

SourceForge.net、Advfn.com(日均 700 萬 PV)、The Shroomery(月 2000 萬頁面)等大型網站均採用 eAccelerator,實測頁面生成時間穩定在 0.1 秒以內,充分證明其高併發下的穩定性與效能。

五、官方資源與參考

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數說明
eaccelerator_put($key, $value, $ttl=0)存入快取,$ttl 為秒數,0 表永久
eaccelerator_get($key)讀取快取,過期或不存在回傳 NULL
eaccelerator_rm($key)刪除指定快取
eaccelerator_gc()清理所有過期快取
eaccelerator_lock($key) / eaccelerator_unlock($key)分散式鎖機制,保證多進程同步
eaccelerator_cache_output($key, $code, $ttl)快取代碼輸出結果
eaccelerator_cache_result($key, $code, $ttl)快取代碼執行回傳值
eaccelerator_cache_page($key, $ttl)快取整頁輸出
eaccelerator_set_session_handlers()設定 Session 處理器至 eAccelerator