從 PHP 5.x 遷移至 PHP 7(含 7.0/7.1/7.2/7.3/7.4),不僅是版本號跳躍,更是 Zend Engine 重寫帶來的** 2-3 倍性能提升**與現代語言特性引入。本文記錄實際線上遷移步驟、基準測試數據、核心 Breaking Changes 及應對策略。
# 1. 安裝依賴
yum install -y gcc libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel libzip-devel oniguruma-devel sqlite-devel
# 2. 獲取源碼(現建議用官方發布包)
git clone https://github.com/php/php-src.git
cd php-src
git checkout PHP-7.4 # 或 PHP-8.1
# 3. 配置編譯參數(精簡生產環境常用)
./buildconf --force
./configure \
--prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--with-curl \
--with-openssl \
--with-zlib \
--with-zip \
--with-gd \
--with-jpeg \
--with-freetype \
--enable-bcmath \
--enable-sockets \
--enable-opcache \
--disable-debug \
--disable-rpath
# 4. 編譯安裝
make -j$(nproc) && make install
# 5. 配置 php.ini、php-fpm.conf、systemd 服務
場景:100 併發、100 請求,測試首頁動態渲染。
| 指標 | PHP 5.5.19 | PHP 7.0-dev | 提升 |
|---|---|---|---|
| QPS (Requests/sec) | 2.09 | 3.67 | +75% |
| 峰值負載 | 3.0 | 2.05 | 降低 32% |
| 記憶體/請求 | ~4.2 MB | ~2.1 MB | 減半 |
註:受限於 1 核 2G 低配環境、網路抖動、開發版非最終優化,實際生產環境(多核、Opcache、JIT)提升通常達 **2-3 倍 QPS、記憶體降 50%+**。
| 變更 | 影響 | 應對 |
|---|---|---|
| 移除 mysql_* 函數 | 致命錯誤 | 全量改用 mysqli/PDO |
| 統一變數語法 | $obj->$prop['key'] 解析改變 | 加花括號明確:$obj->{$prop['key']} |
| foreach 不再修改內部指針 | 邏輯錯誤 | 需 reset() 或改用 for 迴圈 |
| list() 不能解包字串 | 致命錯誤 | 改用 str_split() |
| 整數運算溢位自動轉 float | 精度變化 | 用 bcmath/gmp 處理大整數 |
| 新增保留字 (int, float, bool, string, null, true, false, void, iterable, object) | 類/函數/常量命名衝突 | 重命名或加命名空間 |
| 錯誤轉為 Exception (Error, TypeError, ParseError) | try/catch 捕獲行為變化 | 補充 catch (Throwable $e) 或 catch (Error $e) |
php -l、phan、psalm、phpstan 掃描語法與類型問題。opcache.enable=1, opcache.jit=1255 (PHP 8+),預熱腳本避免首請求慢。PHP 7 遷移是「高投入、高回報」的工程。若仍在 5.x,強烈建議**直接跳至 PHP 8.1/8.2 LTS**,一次到位,享受 JIT、纖程、readonly、DNF 類型等現代特性,並獲得官方積極維護至 2025/2026 年。