PHP 為直譯語言,每次請求皆經歷「讀取腳本 → 詞法分析 → 語法分析 → 編譯為 Opcode → Zend Engine 執行」流程。對於高流量網站,重複編譯造成 CPU 浪費與回應延遲。PHP Accelerator(後整合為 Zend Optimizer+ / OPcache)透過「Opcode 快取」與「共享記憶體」,將編譯後的中間碼存於共享記憶體,後續請求直接載入執行,省去編譯步驟,大幅提升吞吐量。
https://www.php-accelerator.co.uk/download.phpSERVER_NAME 取得金鑰,例:phpa.registration_key = 8edfd13946c96309244fcca309415902# 解壓至 /usr/local/php
tar -zxvf php_accelerator_1.2p2.tar.gz -C /usr/local/php
# php.ini 載入擴展(路徑依實際 .so 檔名調整)
zend_extension=/usr/local/php/php_accelerator_1.2p2.so
# 關閉舊版 Zend Optimizer(若有)
# zend_extension=/usr/local/Zend/lib/ZendOptimizer.so
<VirtualHost *:80>
ServerName www.example.com
# ... 其他設定 ...
# PHP Accelerator 設定
php_value phpa.registration_key 8edfd13946c96309244fcca309415902
php_value phpa 1 # 啟用
php_value phpa.tweaks off # 關閉實驗性優化
php_value phpa.cache_dir /tmp # 快取目錄(需可寫)
php_value phpa.file_perms 400 # 快取檔權限
php_value phpa.ignore_files "/index.php,/admin/*.php" # 排除不快取
php_value phpa.shm_size 8 # 共享記憶體大小
php_value phpa.shm_key 0xc0deb00 # 共享記憶體鍵值
php_value phpa.shm_perms 664 # 共享記憶體權限
</VirtualHost>
apachectl graceful
# 或
systemctl reload httpd
瀏覽任意 PHP 頁面,檢查 /tmp 下是否生成 phpa_* 快取檔;或呼叫 phpinfo() 確認輸出含:
with the PHP Accelerator v1.2p2, Copyright (c) 2001-2002, by Nick Lindridge
# 觀察記憶體快取狀態
phpa_cache_admin -mv
# 觀察檔案快取狀態
phpa_cache_admin -fv
# 設定快取大小(需 root 權限)
phpa_cache_admin -k 16 # 設為 16 MB
| 參數 | 建議值 | 說明 |
|---|---|---|
| phpa.shm_size | 16~64 MB | 視專案檔案總大小與記憶體容量調整;太小導致頻繁驅逐,太大浪費 RAM |
| phpa.cache_dir | /dev/shm/phpa | 掛載 tmpfs 於記憶體,比磁碟快數倍 |
| phpa.ignore_files | 動態生成/含機密資訊檔案 | 避免快取包含 session_id、CSRF token 等動態內容 |
| phpa.tweaks | off | 實驗性優化在生產環境建議關閉,穩定優先 |
php_value phpa 1 生效、cache_dir 可寫、.so 版本匹配 PHP 版本(TS/NTS、API 版本)。mtime,若使用 rsync 部署保留 mtime 需加 -t 參數;或手動清除 cache_dir、重啟 Apache。shm_key 會衝突,每站點設定唯一 shm_key。Zend OPcache,無需額外安裝 PHP Accelerator,直接啟用 opcache.enable=1 並調整 opcache.memory_consumption 等參數即可。典型 WordPress/Discuz! 專案啟用 Opcode 快取後:
具體數值視程式碼複雜度、檔案數量、伺服器規格而異,建議上線前以 ab / wrk / JMeter 進行壓測對比。
PHP Accelerator(及其繼任者 OPcache)是 PHP 效能優化「投資報酬比最高」的單一措施:零程式碼修改、安裝簡單、效果立竿見影。現代 PHP 部署流程應將「啟用 Opcode 快取」列為強制基準項,並配合「靜態資源 CDN、資料庫索引優化、HTTP 快取策略」構建完整效能體系。