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
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
これはphp-fpm
で発生する場合がありますが、面白いのは、コンソールphp
が同じ.iniファイルのセットを同時に使用していても、mcrypt
が実際にはないことを証明しないことです。 2回参照されません。
結局のところ、php-fpm
には、少なくともLinuxではロードしようとしている組み込みのモジュールのデフォルトセットがあります(これはFreeBSDでは再現できないためです)。 mcrypt
がこのリストにあるため、ユーザーが/etc/php.d
ディレクトリに追加の.iniファイルを持っている場合、mcrypt
は2回ロードされるようです。
これの厳しい回避策は、最初に-n
スイッチをphp-fpmに追加し、pnp.ini
をphp-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。
私は同じ問題を抱えていましたが、PHP ./configure --with-mcrypt
オプションを使用してソースからビルドしたためでした。PHPが--with-mcrypt
フラグの場合、extension=mcrypt.so
にphp.ini
を指定する必要はありません。そうすると、上記の警告が発生します。