從原始碼編譯 PHP 可精準控制功能模組、優化效能並解決相依性問題。本文整理 PHP 4.3/4.4 時代的經典 configure 參數,解析核心模組用途,並提供現代 PHP 7/8 編譯的對應參數對照,協助建構符合專案需求的 PHP 執行環境。
| 參數 | 用途 | 範例值 | 備註 |
|---|---|---|---|
--prefix | 安裝根目錄 | /usr/local/php | 所有檔案將安裝於此下的 bin、lib、include 等子目錄 |
--with-apxs / --with-apxs2 | 啟用 Apache 模組 (DSO) | /usr/local/apache/bin/apxs | 指定 apxs 路徑,編譯出 libphp4.so / libphp7.so 載入 Apache |
--with-mysql | MySQL 原生驅動 | /usr/local/mysql | PHP 5.5+ 棄用,改用 --with-mysqli、--with-pdo-mysql |
--with-gd | GD 圖形庫支援 | (無需路徑) | 需系統安裝 libgd、libpng、libjpeg、freetype 開發套件 |
--with-freetype-dir | FreeType 字體庫路徑 | /usr/local | GD 使用 TTF 字體繪圖必備 |
--with-jpeg-dir / --with-png-dir | JPEG/PNG 庫路徑 | /usr/local | GD 處理對應圖片格式必備 |
--with-zlib / --with-zlib-dir | zlib 壓縮庫 | /usr | 支援 gzip 輸出、壓縮串流 |
--enable-mbstring | 多位元組字串處理 | (無參數) | 處理 UTF-8 等多位元組編碼核心功能,現代 PHP 建議必開 |
--with-iconv / --with-iconv-dir | 字元編碼轉換 | /usr/local | PHP 內建函式 iconv()、mb_convert_encoding() 依賴此庫 |
--enable-ftp | FTP 協定支援 | (無參數) | 啟用 ftp_* 系列函式 |
--with-curl | cURL 客戶端庫 | /usr/local | HTTP 請求神器,現代 API 串接必備 |
--with-ldap | LDAP 目錄服務 | /usr/local | 企業級整合 Active Directory/OpenLDAP 需求 |
--enable-inline-optimization | 內聯優化 | (無參數) | GCC 編譯器優化旗標,提升執行速度 |
--disable-posix | 停用 POSIX 函式 | (無參數) | 精簡體積,若專案未用 posix_* 可關閉 |
--enable-memory-limit | 記憶體限制 | (無參數) | PHP 5.2+ 已內建 memory_limit ini 設定,此參數移除 |
--enable-zend-multibyte | Zend 多位元組支援 | (無參數) | PHP 5.4+ 移除,功能併入核心 |
--enable-magic-quotes | 魔術引號 | (無參數) | 已棄用並移除 (PHP 5.4+),造成資安風險,勿使用 |
./configure \
--prefix=/usr/local/php8 \
--with-config-file-path=/usr/local/php8/etc \
--with-config-file-scan-dir=/usr/local/php8/etc/conf.d \
--enable-fpm \ # PHP-FPM 進程管理器 (生產環境標準)
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--enable-bcmath \ # 高精度數學運算
--enable-sockets \ # Socket 通訊
--enable-pcntl \ # 進程控制 (CLI 多進程必備)
--enable-opcache \ # OPcache 位元碼快取 (效能關鍵)
--with-mysqli=mysqlnd \ # MySQL 改用 mysqlnd 原生驅動
--with-pdo-mysql=mysqlnd \
--with-pgsql \ # PostgreSQL
--with-pdo-pgsql \
--with-gd \ # PHP 7.4: --with-gd; PHP 8.0+: --enable-gd
--with-freetype \
--with-jpeg \
--with-webp \ # WebP 圖片支援
--with-zlib \
--with-bz2 \
--with-curl \
--with-openssl \ # OpenSSL 加密 (HTTPS、簽章必備)
--with-readline \ # CLI 互動模式支援
--with-zip \ # Zip 壓縮 (PHP 7.3+ 內建)
--with-xsl \ # XSLT 轉換
--enable-intl \ # 國際化 (ICU 庫)
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-soap \ # SOAP 協定
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--disable-debug \ # 生產環境關閉除錯
--disable-rpath
# CentOS/RHEL/Rocky/Alma
yum install -y gcc gcc-c++ make autoconf \
libxml2-devel openssl-devel sqlite-devel \
libcurl-devel libpng-devel libjpeg-devel \
freetype-devel libwebp-devel oniguruma-devel \
libzip-devel libicu-devel readline-devel \
libxslt-devel bzip2-devel gmp-devel \
openldap-devel postgresql-devel
# Ubuntu/Debian
apt update && apt install -y build-essential \
libxml2-dev libssl-dev libsqlite3-dev \
libcurl4-openssl-dev libpng-dev libjpeg-dev \
libfreetype6-dev libwebp-dev libonig-dev \
libzip-dev libicu-dev libreadline-dev \
libxslt-dev libbz2-dev libgmp-dev \
libldap2-dev libpq-dev
| 錯誤訊息 | 原因 | 解決方案 |
|---|---|---|
configure: error: xml2-config not found | 缺 libxml2 開發套件 | 安裝 libxml2-devel / libxml2-dev |
configure: error: Cannot find OpenSSL's <evp.h> | OpenSSL 開發套件缺失或路徑錯誤 | 安裝 openssl-devel,或指定 --with-openssl-dir=/usr |
configure: error: jpeglib.h not found | 缺 libjpeg 開發套件 | 安裝 libjpeg-devel / libjpeg-dev |
make: *** [ext/gd/gd.o] Error 1 | GD 相依庫版本不符或缺少 freetype | 確認 --with-freetype、--with-jpeg 路徑正確 |
undefined reference to `libiconv_open' | iconv 庫連結失敗 | 安裝 libiconv 或加入 LDFLAGS=-liconv |
make test:執行官方測試套件,確認核心功能正常。php -m:檢查載入模組清單,確認需求模組皆在列。php -i | grep configure:驗證實際生效的編譯參數。php.ini:複製 php.ini-production 並調整 memory_limit、max_execution_time、opcache.enable=1 等生產參數。www.conf:調整 pm.max_children、pm.start_servers 等進程池參數。理解 configure 參數含義,能依專案需求裁剪最精簡、高效的 PHP 執行環境。現代部署建議搭配 PHP-FPM + OPcache + Nginx,並透過 Ansible/Docker 將編譯流程自動化、版本化,確保環境一致性與可重現性。