PHP 5.4 內建不包含 OPcache(5.5+ 才內建),需手動編譯安裝 ZendOptimizerPlus(OPcache 前身)。本文提供從源碼編譯、配置參數調優、驗證生效、監控面板部署的完整流程,讓 PHP 5.4 也能享受字節碼緩存帶來的 2-10 倍性能提升。
# 1. 獲取源碼 (ZendOptimizerPlus 是 OPcache 早期名稱)
git clone https://github.com/zend-dev/ZendOptimizerPlus.git
cd ZendOptimizerPlus
# 2. phpize 生成配置腳本 (需安裝 php5.4-dev / php-devel)
/usr/local/php5.4/bin/phpize
# 3. 配置編譯參數 (指定對應 PHP 版本的 php-config)
./configure --with-php-config=/usr/local/php5.4/bin/php-config
# 4. 編譯安裝
make && make install
# 5. 輸出提示中會顯示 .so 安裝路徑,記錄下來
# 例如:/usr/local/php5.4/lib/php/extensions/no-debug-non-zts-20100525/opcache.so
[opcache]
; 必須:加載擴展 (路徑根據 make install 輸出調整)
zend_extension=/usr/local/php5.4/lib/php/extensions/no-debug-non-zts-20100525/opcache.so
; 開啟
opcache.enable=1
opcache.enable_cli=1 ; CLI 模式也啟用 (腳本/隊列受益)
; 內存分配
opcache.memory_consumption=128 ; 共享內存大小(MB),根據項目代碼量調整,大項目 256-512
opcache.interned_strings_buffer=8 ; 駐留字符串緩存(MB),減少字符串重複分配
; 緩存控制
opcache.max_accelerated_files=4000 ; 最大緩存文件數,質數為宜,大項目 10000+
opcache.revalidate_freq=60 ; 檢查文件更新間隔(秒),開發環境 0,生產 60-300
opcache.fast_shutdown=1 ; 快速關閉,加速請求結束釋放
; 可選優化
opcache.validate_timestamps=1 ; 生產建議 1,配合 revalidate_freq
opcache.save_comments=1 ; 保留註釋(註解路由/Doctrine 需要)
opcache.load_comments=1
opcache.use_cwd=1 ; 避免同名文件衝突
# 重啟 PHP-FPM / Apache
service php5.4-fpm restart
# 或
apachectl graceful
# 驗證
php -m | grep opcache
php -i | grep "opcache.enable"
# 輸出包含 opcache.enable => On 即成功
--enable-opcache 參數即可。opcache.so,加載指令 zend_extension=opcache.so (不需完整路徑,在 extension_dir 中)。可視化查看命中率、內存使用、緩存文件列表、手動重置緩存:
# 下載單文件面板
wget https://gist.github.com/ck-on/4959032/raw/opcache-control-panel.php
# 放置到 Web 可訪問目錄,瀏覽器打開
# 功能:實時統計、文件列表搜索、按目錄/文件清除緩存、配置參數顯示

# 簡單 ab 壓測對比
ab -n 1000 -c 10 https://your-site.com/ # 未啟用 OPcache
# 修改 php.ini 啟用後
ab -n 1000 -c 10 https://your-site.com/ # 啟用 OPcache
# 關鍵指標:Requests per second 提升 2-10 倍,Time per request 大幅下降
| 現象 | 原因 | 解決 |
|---|---|---|
| 啟用後頁面空白/500 | 代碼中有編譯時錯誤、或與其他擴展衝突 | 查看 error_log,嘗試關閉 opcache.fast_shutdown、opcache.save_comments |
| 修改代碼不生效 | revalidate_freq 過大或 validate_timestamps=0 | 開發環境設 0,生產設 60 並手動重置或重啟 PHP-FPM |
| 內存耗盡 | memory_consumption 過小 | 調大至 256/512M,監控 opcache_get_status()['memory_usage'] |
| 編譯報錯 phpize not found | 未安裝 php-dev 包 | yum install php54w-devel / apt install php5.4-dev |
PHP 5.4 通過編譯安裝 ZendOptimizerPlus (OPcache) 並配置 128MB+ 內存、4000+ 文件、60s 驗證頻率、快速關閉 即可獲得生產級性能提升。配合 OPcache Control Panel 實時監控命中率(目標 > 90%)、內存使用率(< 80%)。升級至 PHP 5.5+ 只需編譯參數 --enable-opcache,配置完全復用。OPcache 是 PHP 性能優化「投入產出比最高」的單一優化項,無理由不開啟。