phpize 是 PHP 源碼自帶的腳本,用於為**已安裝的 PHP** 構建擴展模塊 (`.so`),無需重新編譯 PHP 本體。掌握其流程,能讓你快速集成 memcached、redis、swoole、imagick 等第三方擴展,或開發自定義 C 擴展。
phpize 讀取當前 PHP 的 php-config 獲取編譯參數 (include 路徑、擴展目錄、Zend API 版本等)。configure、Makefile.in 等構建文件。./configure --with-php-config=...、make、make install 產出 `extension_dir。php.ini 添加 extension=.so 生效。# 1. 下載並解壓擴展源碼
wget https://pecl.php.net/get/memcached-3.2.0.tgz
tar -xzf memcached-3.2.0.tgz
cd memcached-3.2.0
# 2. 執行 phpize (必須在擴展源碼根目錄)
/usr/local/php/bin/phpize
# 輸出示例:
# Configuring for:
# PHP Api Version: 20190902
# Zend Module Api No: 20190902
# Zend Extension Api No: 320190902
# 3. 配置編譯選項 (指定 php-config 路徑)
./configure --with-php-config=/usr/local/php/bin/php-config \
--enable-memcached-json \
--with-libmemcached-dir=/usr/local/libmemcached
# 4. 編譯安裝
make -j$(nproc) && make install
# 成功輸出:Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
# 5. 啟用擴展
echo "extension=memcached.so" >> /usr/local/php/etc/php.ini
# 或建議:echo "extension=memcached.so" > /usr/local/php/etc/php.d/10-memcached.ini
# 6. 重啟 PHP-FPM 生效
systemctl reload php-fpm
# 7. 驗證
php -m | grep memcached
php -r "new Memcached(); echo 'OK';"
| 錯誤現象 | 原因 | 解決方法 |
|---|---|---|
Cannot find config.m4 | 未進入擴展源碼根目錄 | cd memcached-3.2.0 後再執行 phpize |
Cannot find autoconf | 缺少 autoconf/m4 工具鏈 | yum install -y autoconf automake libtool m4 或 apt install -y autoconf |
php-config not found | 路徑錯誤或 PHP 未安裝開發包 | 安裝 php-devel/php-dev;指定正確路徑 --with-php-config=... |
libmemcached not found | 依賴庫缺失 | yum install libmemcached-devel 或指定 --with-libmemcached-dir=... |
undefined symbol: php_json_encode | 擴展依賴 json 模塊但未啟用 | 確保 extension=json.so 在 memcached.so 之前加載 |
編譯通過但 php -m 無輸出 | ini 未生效或 extension_dir 不匹配 | 檢查 php --ini、php -i | grep extension_dir |