web-dev-qa-db-ja.com

PHP警告:モジュール 'mcrypt'はすでにロードされています

PHPでコマンドを実行すると、エラーが表示されます。たとえば、php -v私のPHPバージョンを表示するには、エラーが表示され、次にPHPに関する情報が表示されます。

モジュール 'mcrypt'はすでに行0の不明にロードされています

zied@ubuntu:~$ php -v

PHP Warning:  Module 'mcrypt' already loaded in Unknown on line 0

PHP 5.4.25-1+sury.org~quantal+2 (cli) (built: Feb 12 2014 11:11:30) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
18
Zied R.

php.iniには、次の2行以上が含まれています:

extension=mcrypt.so

1つを除いてすべて削除します。

php.iniは通常、/etc/php.iniまたは/etc/php5/php.iniに住んでいます。追加の.iniファイルが含まれている場合があります。それらのすべてを次のように表示できます。

$ php -i | grep .ini\$
Loaded Configuration File => /usr/local/etc/php.ini
Additional .ini files parsed => /usr/local/etc/php/extensions.ini
user_ini.filename => .user.ini => .user.ini
43
Martin Tournoij

これはphp-fpmで発生する場合がありますが、面白いのは、コンソールphpが同じ.iniファイルのセットを同時に使用していても、mcryptが実際にはないことを証明しないことです。 2回参照されません。

結局のところ、php-fpmには、少なくともLinuxではロードしようとしている組み込みのモジュールのデフォルトセットがあります(これはFreeBSDでは再現できないためです)。 mcryptがこのリストにあるため、ユーザーが/etc/php.dディレクトリに追加の.iniファイルを持っている場合、mcryptは2回ロードされるようです。

これの厳しい回避策は、最初に-nスイッチをphp-fpmに追加し、pnp.iniphp-fpm.iniにコピーし、すべてのモジュールを結果のphp-fpm.iniに含めますexcept mcrypt =および正しいiniファイルを指す追加のスイッチを追加するため、追加全体は次のようになります:-n -c /etc/php-fpm.ini

この方法でphp-fpmを実行しても問題はありません。

これは、mcryptの問題に関する検索エンジンで最も参照されている投稿であるため、ここで書いています。ソースの質問はコンソールのphpに関するものでした。

pdate:この回避策を使用していましたが、厄介です。しばらく前に、なぜこれが起こったのかを正確に理解しました。これを説明するためにもう少し単語を費やしますが、これは特定のタイプの障害を説明するため、退屈になる可能性があります。したがって、私の場合、この問題は、自分で作成したカスタムphpビルドを使用していて、組み込みのリストにmcryptを追加したことがあるという事実が原因でしたstaticモジュール。そしてthenビルドされたモジュールとして再度追加したので、それは2回ロードされましたです。これは、カスタムビルドでmcryptがconfigureスクリプトのモジュールのリストで参照され、sharedとしてリストされていない場合に発生します(仕様のこの部分は簡単にできます) %configure \は仕様で一度しか言及されていないため、見つかりました。私の場合、解決策はmcryptを構成部分から完全に削除し、それをbuild-cgiおよびbuild-ztscliステージに追加することでした。 "fpmステージについてはどうでしょうか?"-そしてそれは良い質問ですが、結局のところfpm sapi自体は最小限のモジュールで構築されており、汎用共有 1。

2
drookie

私は同じ問題を抱えていましたが、PHP ./configure --with-mcryptオプションを使用してソースからビルドしたためでした。PHPが--with-mcryptフラグの場合、extension=mcrypt.sophp.iniを指定する必要はありません。そうすると、上記の警告が発生します。

1
W.M.