V8js 讓 PHP 能直接執行 JavaScript 程式碼(基於 Google V8 引擎),但在 CentOS 上編譯安裝依賴地獄極深。本文記錄經過實測驗證的完整流程、版本鎖定策略與常見錯誤解法,助你一次成功。
| 元件 | 建議版本 | 說明 |
|---|---|---|
| CentOS | 6.x / 7.x (64-bit) | 5.x 太舊,glibc 版本不足無法編譯新版 V8 |
| GCC | 4.4.7 / 4.8.5 | 系統預設即可,勿手動升級 glibc |
| PHP | 5.4 / 5.6 / 7.0+ | 對應 v8js 版本見下表 |
| V8 | 3.15.5 (舊) / 6.x+ (新) | PHP 5.x 用 3.15.5;PHP 7+ 用 6.x+ |
| Python | 2.7 | V8 建置腳本需 Python 2 |
| v8js | 0.1.3 (PHP 5.x) / 2.x (PHP 7+) | PECL 直接安裝最省事 |
# 1. 取得 V8 3.15.5 源碼
wget https://github.com/v8/v8-git-mirror/archive/3.15.5.tar.gz
tar xzf 3.15.5.tar.gz
cd v8-git-mirror-3.15.5
# 2. 下載依賴(需翻牆或預先鏡像)
make dependencies
# 3. 編譯共享庫(64 位系統用 x64.release)
make x64.release library=shared -j4 # -j4 可加速,但易觸發 internal error,建議去掉 -j
# 4. 安裝庫與頭文件
cp out/x64.release/lib.target/libv8.so /usr/lib64/
cp -r include/v8* /usr/include/
# 方式一:PECL 自動編譯(推薦)
pecl install v8js-0.1.3 # PHP 5.x
# pecl install v8js-2.1.1 # PHP 7+
# 方式二:手動編譯(需指定 v8 路徑)
cd v8js-0.1.3
phpize
./configure --with-v8js=/usr # 若 libv8.so 在 /usr/lib64
make && make install
extension=v8js.so
-j4,單執行緒編譯雖慢但穩定。ldconfig -p | grep v8,若無輸出,執行 ldconfig 刷新快取。/usr/lib64/libv8.so 存在且權限 755。make x64.release 而非 ia32.release。yum install re2c libstdc++-devel glibc-develphp -m | grep v8js
php -r 'echo (new V8Js)->executeString("1+1");' # 輸出 2 即成功
編譯安裝 v8js 雖繁瑣,但掌握「版本鎖定、共享庫正確安裝、避開並行編譯」三大原則,即可在生產環境穩定運行。建議將編譯好的 libv8.so 與 v8js.so 打包成 RPM 或 Docker Image,實現不可變基礎設施。