啟動 PHP 時出現 PHP Warning: Module 'modulename' already loaded 表示同一擴展模組被重複載入。本文分析兩大常見原因與排查步驟。
php.ini 中有 extension=modulename/etc/php/conf.d/ 或 /etc/php.d/ 下的 *.ini 又包含相同 extension=modulename排查:
php -i | grep "extension_dir"
php -i | grep "Scan this dir"
php -i | grep "Additional .ini files parsed"
# 檢查所有列出的 .ini 檔案,搜尋重複的 extension 行
grep -r "extension=modulename" /etc/php/
extension_dir = "/usr/lib/php/extensions"modulename.soextension_dir 內所有 .so,加上 extension=modulename 導致重複解決:
php.ini 中的 extension=modulename,改由 conf.d/ 管理。extension_dir 指向不含該 .so 的目錄。php.ini 不寫任何 extension=。/etc/php/conf.d/20-modulename.ini:; 20-modulename.ini
extension=modulename
; 可加入擴展專屬設定
modulename.setting=value
php -m | grep modulename # 僅出現一次
php -v # 無 Warning 輸出
「Module already loaded」本質是設定檔重複宣告。採用 conf.d/ 模組化管理、主 php.ini 不載入擴展,即可徹底避免此警告。希望本文對您的 PHP 程式設計有所幫助。