【原因&対処法】PHPで「PHP Warning: Module “xxxxxxxx” is already loaded loaded in Unknown on line 0」

PHPを使っていると、ログやターミナルに次のような警告が大量に並ぶことがあります。

PHP Warning:  Module "curl" is already loaded in Unknown on line 0
PHP Warning:  Module "exif" is already loaded in Unknown on line 0
PHP Warning:  Module "fileinfo" is already loaded in Unknown on line 0
PHP Warning:  Module "ftp" is already loaded in Unknown on line 0
PHP Warning:  Module "gd" is already loaded in Unknown on line 0
PHP Warning:  Module "mbstring" is already loaded in Unknown on line 0
PHP Warning:  Module "sockets" is already loaded in Unknown on line 0
PHP Warning:  Module "sqlite3" is already loaded in Unknown on line 0

ローカル開発環境でも本番環境でも見かける典型的なエラー。実は原因はシンプルなので対処法とか確認方法を自分用にメモ。

🔍 原因:同じモジュールが重複して読み込まれている

具体的には…

  1. php.ini でモジュールが有効化・読み込まれる。
  2. 追加の .ini ファイル(手動インストールやパッケージ管理からのインストール)が参照されて再度モジュールが読み込まれる。

その結果、PHP が同じ拡張を二重に読み込もうとして警告が出ます。


🛠 対処方法:php.ini の該当モジュールをコメントアウトする

要するに重複読み込みを無くせばいいだけって言う。例えば mbstring が重複読み込みされている場合、php.ini の該当行をコメントアウトすればOK。

📌 変更前(php.ini)

extension=mbstring

✏ 変更後(php.ini)

;extension=mbstring

🖥ちなみに:どの php.ini が使われているか確認する方法

phpinfo(); 関数を使う。 phpinfo.php ってファイルを作って先頭に「<?php phpinfo(); ?>」って書いてブラウザでアクセス。(※ただし、不正侵入とかのアタリをつけるのに悪用されることが多いので確認後は削除しておく)

✔ 確認ポイント

項目名内容
Loaded Configuration File現在使用中の php.ini のフルパス(例: /etc/php/8.4/apache2/php.ini)
Scan this dir for additional .ini files自動読み込み対象の .ini ディレクトリ
Additional .ini files parsed実際に読み込まれた追加 .ini ファイル一覧

ここに該当モジュールの設定が複数存在すると、今回のようなエラーが発生します。


💡まとめ

事象モジュール重複読み込みで警告発生
原因php.ini と追加 .ini の両方で extension 指定
解決方法php.ini 側をコメントアウトする(;extension=xxx)
確認方法phpinfo() で設定ファイルの場所を確認

🎁おまけ

  • 手動インストールで拡張を追加した際は conf.d 内に追加された自動設定を必ずチェック
  • Docker イメージ構築時は docker-php-ext-enable による自動生成 ini に注意

エラーとか警告、放置せずに調べとくと学びになって良いかも。

質問・コメントなどあると嬉しいです