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ローカル開発環境でも本番環境でも見かける典型的なエラー。実は原因はシンプルなので対処法とか確認方法を自分用にメモ。
🔍 原因:同じモジュールが重複して読み込まれている
具体的には…
- php.ini でモジュールが有効化・読み込まれる。
- 追加の .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 に注意
エラーとか警告、放置せずに調べとくと学びになって良いかも。
