首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 警告「Module already loaded」解決方案完整指南

     編輯:PHP 相關知識

前言

啟動 PHP 時出現 PHP Warning: Module 'modulename' already loaded 表示同一擴展模組被重複載入。本文分析兩大常見原因與排查步驟。

原因一:php.ini 與 conf.d 重複載入

  • 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 指向目錄包含 .so,且 php.ini 又明確載入

  • extension_dir = "/usr/lib/php/extensions"
  • 該目錄下有 modulename.so
  • PHP 某些版本會自動載入 extension_dir 內所有 .so,加上 extension=modulename 導致重複

解決:

  • 移除 php.ini 中的 extension=modulename,改由 conf.d/ 管理。
  • 或調整 extension_dir 指向不含該 .so 的目錄。
  • 統一原則:每個擴展僅在一個 .ini 檔案中宣告一次。

標準化管理建議

  1. 主 php.ini 不寫任何 extension=。
  2. 每個擴展建立獨立 /etc/php/conf.d/20-modulename.ini:
; 20-modulename.ini
extension=modulename
; 可加入擴展專屬設定
modulename.setting=value
  1. 命名以數字前綴控制載入順序(如 10-opcache.ini, 20-redis.ini)。
  2. 部署時使用配置管理工具(Ansible, Puppet)確保冪等性。

驗證修復

php -m | grep modulename  # 僅出現一次
php -v                    # 無 Warning 輸出

總結

「Module already loaded」本質是設定檔重複宣告。採用 conf.d/ 模組化管理、主 php.ini 不載入擴展,即可徹底避免此警告。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved