0%

解決 PHP「Module 'pdo_sqlsrv' is already loaded」警告問題

前言

近期在維護Ubuntu 機器內的 Laravel 專案時,執行 CLI 指令時出現以下 PHP 警告:

1
PHP Warning: Module 'pdo_sqlsrv' is already loaded in Unknown on line 0

此警告的意思是 pdo_sqlsrv 擴充套件被 PHP 重複載入了,雖然功能正常不影響使用,但每次執行都會跳警告,有點煩人😅

這邊紀錄一下排查與解決的過程,避免下次又踩雷。

問題排查

透過以下指令查看目前 CLI 模式載入的設定檔:

1
php --ini

alt text

可以發現:

1
2
/etc/php/8.2/cli/conf.d/20-pdo_sqlsrv.ini
/etc/php/8.2/cli/conf.d/30-pdo_sqlsrv.ini

這兩個檔案其實都是 symlink 指向同一個原始檔案 /etc/php/8.2/mods-available/pdo_sqlsrv.ini

alt text

代表模組被載入了兩次,導致出現 Warning。

這種情況常見於安裝 PHP 套件後,系統在 conf.d/ 中建立了多個連結,例如你跑過 phpenmod 或 apt install php8.2-pdo-sqlsrv 等自動化流程。

解決方式

✅ 移除多餘的設定檔

保留其中一個(建議保留數字較小的,例如 20-pdo_sqlsrv.ini),刪除另一個:

(conf.d/*-pdo_sqlsrv.ini 的數字代表載入順序,愈小的數字愈早被載入)

1
2
sudo rm /etc/php/8.2/cli/conf.d/30-pdo_sqlsrv.ini
sudo rm /etc/php/8.2/fpm/conf.d/30-pdo_sqlsrv.ini

✅ 重啟服務

如果有使用 FPM 或 Apache,記得重啟:

1
2
sudo systemctl restart php8.2-fpm
sudo systemctl restart apache2

✅ 再次確認是否正常

重新執行一次原本有警告的指令,例如:

1
php artisan migrate

確認畫面不再出現 Warning 即可

結語

這類 Warning 雖然不影響實際功能,但對於除錯時的 log 資訊會造成干擾。良好的設定整潔度可以讓維運更有效率!

希望這篇筆記能幫助之後的自己或其他遇到相同問題的人 🙌