雖然 PHP 5.4 已停止維護,但部分老舊項目仍需運行於此版本。本文記錄在 CentOS 7 上從源碼編譯安裝 PHP 5.4.8 的完整過程,涵蓋依賴安裝、配置參數、安裝驗證、擴展模塊動態添加、配置文件管理,並與 YUM 安裝方式對比,為遷移維護老項目提供參考。
# 安裝編譯依賴
yum install -y gcc gcc-c++ libxml2-devel openssl-devel bzip2-devel \
libcurl-devel libjpeg-devel libpng-devel freetype-devel \
libmcrypt-devel readline-devel libxslt-devel sqlite-devel \
oniguruma-devel libzip-devel
cd /usr/local/src wget https://museum.php.net/php5/php-5.4.8.tar.gz tar xzf php-5.4.8.tar.gz cd php-5.4.8
./configure \ --prefix=/data/application/php \ --with-config-file-path=/data/application/php/lib \ --with-config-file-scan-dir=/data/application/php/lib/php.d \ --enable-fpm \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-mbstring \ --enable-sockets \ --enable-bcmath \ --enable-pcntl \ --enable-ftp \ --enable-zip \ --enable-soap \ --enable-calendar \ --enable-exif \ --with-openssl \ --with-zlib \ --with-bz2 \ --with-curl \ --with-mcrypt \ --with-mhash \ --with-pcre-regex \ --with-sqlite3 \ --with-pdo-sqlite \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-xsl \ --with-readline \ --with-gettext \ --with-iconv \ --with-libxml-dir \ --with-pear
make -j$(nproc) make install
# 檢查版本 /data/application/php/bin/php -v # 檢查配置文件加載情況 /data/application/php/bin/php --ini # 輸出示例: # Configuration File (php.ini) Path: /data/application/php/lib # Loaded Configuration File: /data/application/php/lib/php.ini # Scan for additional .ini files in: /data/application/php/lib/php.d # Additional .ini files parsed: (none) # 檢查內置模塊 /data/application/php/bin/php -m
編譯時未啟用的模塊,可通過 phpize 動態添加:
/data/application/php/lib/php.d/pcntl.ini # 5. 驗證 /data/application/php/bin/php -m | grep pcntl
; /data/application/php/lib/php.ini engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off serialize_precision = 17 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source disable_classes = expose_php = Off max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 error_log = /var/log/php_errors.log post_max_size = 8M upload_max_filesize = 2M max_file_uploads = 20 default_socket_timeout = 60 date.timezone = Asia/Shanghai session.save_handler = files session.save_path = "/var/lib/php/session" session.gc_maxlifetime = 1440 opcache.enable = 1 opcache.enable_cli = 1 opcache.memory_consumption = 128 opcache.interned_strings_buffer = 8 opcache.max_accelerated_files = 4000 opcache.revalidate_freq = 60 opcache.fast_shutdown = 1
# 安裝 yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath php-json php-mcrypt php-opcache # 配置文件結構 /etc/php.ini # 主配置 /etc/php.d/ # 模塊配置目錄 ├── bcmath.ini ├── curl.ini ├── gd.ini ├── mbstring.ini ├── mcrypt.ini ├── mysql.ini ├── mysqli.ini ├── opcache.ini ├── pdo.ini ├── pdo_mysql.ini └── ... # PHP-FPM 配置 /etc/php-fpm.conf /etc/php-fpm.d/www.conf
| 問題 | 解決 |
|---|---|
| configure: error: libxml2 not found | yum install libxml2-devel |
| configure: error: Cannot find OpenSSL's libraries | yum install openssl-devel; 指定 --with-openssl-dir |
| make: *** [ext/gd/gd.o] Error 1 | yum install libjpeg-devel libpng-devel freetype-devel |
| php-fpm: error while loading shared libraries: libzip.so.5 | yum install libzip-devel; 重新編譯或 ln -s |
| 動態擴展編譯失敗:phpize not found | yum install php-devel |
CentOS 7 編譯安裝 PHP 5.4.8 的核心流程:依賴準備 → 配置參數 → 編譯安裝 → 配置部署 → 動態擴展 → 驗證測試。關鍵優勢在於版本精確控制、安裝路徑自定義、多版本共存。生產環境建議優先使用 YUM/模塊化倉庫安裝以獲得安全更新,僅在版本強依賴場景下採用源碼編譯。無論哪種方式,標準化的配置管理(php.ini、php-fpm.d、php.d)與監控日誌體系都是穩定運行的基石。