所有需從原始碼編譯的 PHP 擴展(PECL 套件、GitHub 專案、自研擴展),通用標準流程。
wget https://pecl.php.net/get/swoole-1.7.21.tgz
tar zxvf swoole-1.7.21.tgz
cd swoole-1.7.21
/usr/local/php/bin/phpize
注意:務必使用目標 PHP 版本對應的 phpize,路徑視安裝前綴而定。若 PATH 已包含正確 phpize,可直接輸入 phpize。
./configure --with-php-config=/usr/local/php/bin/php-config
同理,指定正確的 php-config 路徑。若需啟用特定功能(如 --enable-openssl、--enable-http2),參考 ./configure --help 添加。
make
make test
確保無錯誤、無核心測試失敗。若有失敗,檢查相依套件(如 libssl、libcurl)版本是否符合。
make install
輸出範例:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
此路徑即為 extension_dir,swoole.so 將置於此處。
vim /usr/local/php/lib/php.ini # 在 [PHP] 或擴展區塊加入 extension=swoole.so
service php-fpm reload # 或 service php-fpm restart
php -m | grep swoole
# 或
php -r "var_dump(extension_loaded('swoole'));"
| 錯誤現象 | 可能原因 | 解決方向 |
|---|---|---|
phpize: not found | 未安裝 php-dev / php-devel 套件 | apt-get install php5-dev / yum install php-devel |
configure: error: Cannot find php-config | 路徑錯誤或未安裝 php-dev | 確認 php-config 絕對路徑 |
make: *** [swoole.lo] Error 1 | 缺少相依庫開發套件(如 openssl-devel) | 安裝對應 -devel 套件後重跑 configure |
啟動報 Unable to load dynamic library | extension_dir 不對、so 檔缺失、PHP 版本不匹配(ZTS/non-ZTS、API 版本) | 核對 phpinfo() 中的 extension_dir、Thread Safety、PHP API 版本 |
#!/bin/bash
set -e
EXT_NAME="swoole"
EXT_VERSION="1.7.21"
PHP_PREFIX="/usr/local/php"
cd /tmp
wget -q "https://pecl.php.net/get/${EXT_NAME}-${EXT_VERSION}.tgz"
tar zxf "${EXT_NAME}-${EXT_VERSION}.tgz"
cd "${EXT_NAME}-${EXT_VERSION}"
"${PHP_PREFIX}/bin/phpize"
./configure --with-php-config="${PHP_PREFIX}/bin/php-config"
make -j$(nproc)
make test
make install
echo "extension=${EXT_NAME}.so" > "${PHP_PREFIX}/lib/php.d/${EXT_NAME}.ini"
service php-fpm reload
echo "${EXT_NAME} ${EXT_VERSION} installed successfully."
掌握 phpize → configure → make → make test → make install → php.ini → reload 這套標準流程,即可應對絕大多數 PHP 擴展的部署需求。關鍵在於「使用正確版本的 phpize/php-config」與「完整跑 make test」。