在使用 phpize 動態編譯 PHP 擴展(如 memcache、redis、swoole)時,常遇到 Cannot find autoconf 錯誤。本文提供從根因分析到一鍵修復的完整方案。
# /usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.
phpize 依賴 autoconf、automake、libtool、m4 等 GNU 構建工具鏈生成 configure 腳本。錯誤提示明確指出:系統缺少 autoconf 或其版本不匹配、環境變量 PHP_AUTOCONF 未正確設置。
# RHEL/CentOS/Fedora
yum install -y autoconf automake libtool m4 gcc gcc-c++ make
# Debian/Ubuntu
apt-get update && apt-get install -y autoconf automake libtool m4 build-essential
# Alpine
apk add autoconf automake libtool m4 gcc g++ make
# 1. 安裝 m4 (autoconf 依賴)
cd /usr/src
wget https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.gz
tar -zxvf m4-1.4.19.tar.gz
cd m4-1.4.19
./configure && make && make install
# 2. 安裝 autoconf
cd /usr/src
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz
tar -zxvf autoconf-2.71.tar.gz
cd autoconf-2.71
./configure && make && make install
# 3. 驗證
autoconf --version
# 輸出應類似:autoconf (GNU Autoconf) 2.71
若系統存在多個 autoconf 版本,需顯式指定給 phpize 使用:
export PHP_AUTOCONF=/usr/local/bin/autoconf
export PHP_AUTOHEADER=/usr/local/bin/autoheader
# 或寫入 ~/.bashrc 永久生效
# 1. 下載擴展源碼
wget https://pecl.php.net/get/memcache-4.0.5.2.tgz
tar -zxvf memcache-4.0.5.2.tgz
cd memcache-4.0.5.2
# 2. 執行 phpize(此時應無報錯)
/usr/local/webserver/php/bin/phpize
# 3. 配置
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
# 4. 編譯安裝
make && make install
# 5. 修改 php.ini 啟用
echo "extension=memcache.so" >> /usr/local/webserver/php/lib/php.ini
# 6. 重啟服務驗證
service php-fpm restart
php -m | grep memcache
phpize(/path/to/php/bin/phpize),而非系統默認。php-devel/php-dev 包提供 php-config 與頭文件。kernel-devel/linux-headers。Cannot find autoconf 本質是構建工具鏈缺失。生產環境首選 yum/apt 安裝 autoconf automake libtool m4 gcc make,一條命令解決 99% 場景。源碼編譯僅作離線或特定版本備選。裝好工具鏈後,phpize → configure → make install 標準三部曲即可順利完成擴展動態編譯。