這篇文章記錄自編譯 PHP 擴充模組-pdo_sqlsrv標準流程,怕自已忘記XD
方案一: 使用套件指令安裝
執行以下指令安裝PHP連結MSSQL的相關套件
sudo dnf install php-devel
sudo dnf install unixODBC-devel (如果失敗可以先執行sudo dnf config-manager –set-enabled crb)
sudo pecl install channel://pecl.php.net/pdo_sqlsrv-5.10.1
上述會跑一堆指令後會看到以下訊息
Build process completed successfully
Installing ‘/usr/lib64/php/modules/pdo_sqlsrv.so’
install ok: channel://pecl.php.net/pdo_sqlsrv-5.10.1
Extension pdo_sqlsrv enabled in php.ini
查看你的php模組目錄/usr/lib64/php/modules,應該就下有新增一個
pdo_sqlsrv.so
而且php.ini也會寫入
extension=”pdo_sqlsrv.so”
最後請重新啟動環境
sudo systemctl restart php-fpm
php -m | grep pdo_sqlsrv
方案二:pdo_sqlsrv自編譯
一開始測試方案一發現除了一些套件沒有安裝補安裝後,後續遇到php cli (php -v)與php-fpm (phpinfo();的結果)版本不一致問題 Orz
Step1:統一好 php 版本與路徑
- 你系統裡可能同時存在:
- 系統內建
/usr/bin/php
(ex: 8.0.30 / 8.2.6) - 自編譯
/usr/local/php/bin/php
(ex: 你實際 php-fpm 用的版本)
- 系統內建
- 擴充模組的編譯必須跟你 php-fpm 用的 php 版本完全一致
Step2: 必須先確認好「你要用的 PHP 是哪個版本」
which php
php -v
php --ini
php -i | grep extension_dir
👉 你真正要用來擴充的版本,應該是跟 php-fpm 相同的那份 PHP binary
Step3: 確保 PATH 先切換正確(關鍵)
export PATH=/usr/local/php/bin:$PATH
👉 讓你所有 php, phpize, php-config, pecl 都會優先執行你自編譯的 PHP 版本
which php
which phpize
which php-config
Step4: 開始擴充模組編譯時,嚴格指定正確的 php-config
cd /usr/local/src
wget https://pecl.php.net/get/pdo_sqlsrv-5.12.0.tgz
tar zxvf pdo_sqlsrv-5.12.0.tgz
cd pdo_sqlsrv-5.12.0
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
sudo make install
Step5: php.ini extension_dir 要正確指向自編譯 extension 目錄
編輯vim php.ini
確認你的使用路徑: 以 phpinfo()
結果為最準,會看到以下的資訊
Configuration File (php.ini) Path | /usr/local/php/etc |
Loaded Configuration File | /usr/local/php/etc/php.ini |
#擴充模組目錄,預設的基本模組是不需要在搬到這個指定資料夾的
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20220829”
#新增這次新編譯的模組
extension=pdo_sqlsrv.so
Step6: 每次修改 php.ini 之前,先用 php -m
測試驗證
php -m
php -r “print_r(PDO::getAvailableDrivers());”
Step7: 重啟 php-fpm
sudo systemctl restart php-fpm
最後重點覆習!!
先統一 php -v 版本環境,確保 phpize/php-config 路徑正確,再開始編譯任何擴充模組,才能避免 API mismatch。