Zend Optimizer 是 Zend Technologies 釋出的 **免費 PHP 擴展**,針對 PHP 4/5 透過 **後處理中間碼** 進行優化:消除冗餘指令、內聯函數、常數摺疊、死碼消除等,官方宣稱可提升 20-40% 效能。**注意:PHP 5.5+ 內建 Zend OPcache,Zend Optimizer 已停止更新,不支援 PHP 7+。**
; php.ini 末尾
[Zend Optimizer]
zend_extension_ts="C:\Program Files\Zend\ZendOptimizer.dll" ; Non-TS 用 zend_extension
zend_optimizer.optimization_level=15
zend_optimizer.encoder_loader=0
Linux/Unix:`zend_extension=/usr/local/zend/lib/ZendOptimizer.so`
| 指令 | 型別 | 預設 | 建議 | 說明 |
|---|---|---|---|---|
| zend_optimizer.optimization_level | integer | 15 | 15 (生產) / 0 (除錯) | 位元遮罩,控制啟用哪些優化通道 |
| zend_optimizer.encoder_loader | boolean | 1 | 0 | 是否支援 Zend Encoder 加密腳本解碼 (若無加密碼請關閉) |
| zend_optimizer.enable_loader | boolean | 1 | 1 | 總開關 |
| zend_optimizer.disable_licensing | boolean | 0 | 1 | 禁用授權檢查 (僅舊版相關) |
| Pass | 值 | 優化內容 | 風險 |
|---|---|---|---|
| Pass 1 | 1 (0x1) | 常數摺疊、靜態計算 | 極低 |
| Pass 2 | 2 (0x2) | 死碼消除、無用變數移除 | 極低 |
| Pass 3 | 4 (0x4) | 函數內聯 (小函數) | 低 (可能影響回溯行號) |
| Pass 4 | 8 (0x8) | 迴圈優化、強度削減 | 低 |
| Pass 5 | 16 (0x10) | 全域變數優化 | 中 (動態變數名可能失效) |
| Pass 6 | 32 (0x20) | 字串優化 | 低 |
| Pass 7 | 64 (0x40) | 陣列優化 | 低 |
| Pass 8 | 128 (0x80) | 例外處理優化 | 中 |
| Pass 9 | 256 (0x100) | 物件/類別優化 | 中 |
| Pass 10 | 512 (0x200) | 進階資料流分析 | 高 (罕見邊界案例可能改變語義) |
預設 15 = Pass 1~4 (1+2+4+8),官方「High」模式。
**1023 = Pass 1~10 全開** (舊文檔常見),但 Pass 5-10 在複雜應用中偶發誤優化,**生產建議保守用 15**,除非經完整回歸測試。
<?php
// bench.php
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
$a = strlen('test') + count([1,2,3]) * 2;
$b = sprintf('%04d', $i);
$c = implode(',', range(1, 10));
}
$end = microtime(true);
echo "Time: " . ($end - $start) . "s\n";
echo "Optimization level: " . ini_get('zend_optimizer.optimization_level') . "\n";
分別設 `0`、`15`、`1023` 執行 3 次取中位數比較。
; php.ini
zend_extension=opcache.so ; Windows: php_opcache.dll
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256 ; MB
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60 ; 秒,0=每請求檢查 (開發)
opcache.fast_shutdown=1
opcache.enable_file_override=1
opcache.optimization_level=0x7FFFBFFF ; 全開 (預設)
; 生產建議關閉 revalidate_freq 或設 300,部署後需重啟 php-fpm 或發送 SIGUSR2
OPcache 優勢:原生整合、JIT (PHP 8+)、無授權問題、效能優於 Zend Optimizer、持續維護。