Предупреждение PHP: модуль "mcrypt" уже загружен

Когда я запускаю команду с PHP, она показывает мне ошибку. Например, когда я запускаю php -v, чтобы увидеть мою PHP-версию, он показывает мне ошибку, а затем информацию о PHP:

Модуль 'mcrypt' уже загружен в Unknown в строке 0

[email protected]:~$ 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

Ответы

Ответ 1

Ваш php.ini содержит две или более следующих строк:

extension=mcrypt.so

Удалите все, кроме одного.

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

Ответ 2

Иногда это случается с php-fpm, и самое забавное: console php не делает этого с помощью одного и того же набора .ini файлов в одно и то же время, доказывая, что mcrypt на самом деле isn ' t дважды ссылается.

Как оказалось, php-fpm имеет набор встроенных модулей по умолчанию, которые он пытается загрузить, по крайней мере, на Linux (так как это не воспроизводится на FreeBSD). mcrypt находится в этом списке, поэтому, когда пользователь имеет дополнительный .ini файл в каталоге /etc/php.d, mcrypt, кажется, загружается дважды.

Суровое обходное решение для этого заключается в том, чтобы добавить переключатель -n в php-fpm в начале, скопировать pnp.ini в php-fpm.ini, включить все ваши модули в результирующий php-fpm.ini , кроме mcrypt и добавьте дополнительный переключатель, указывающий на правильный ini файл, поэтому все добавление выглядит следующим образом: -n -c /etc/php-fpm.ini.

Таким образом, запуск php-fpm не будет жаловаться.

Я пишу это здесь, потому что это самая ссылка в поисковых системах о проблеме mcrypt. Я понимаю, что исходный вопрос касался консоли php.

Обновление: Я использовал этот обходной путь, но это противно. Некоторое время назад я точно понял, почему это произошло. Я расскажу еще несколько слов, чтобы описать это, но это может быть скучно, поскольку это будет описывать определенный тип сбоя. Итак, в моем случае эта проблема была вызвана тем фактом, что я использовал собственную сборку php, созданную мной, а иногда добавлял mcrypt в список встроенных статических модулей. И затем я добавил его снова как встроенный модуль, поэтому он был загружен дважды. Это происходит с пользовательской сборкой, когда mcrypt ссылается в списке модулей для configure script и не указан как общий (эта часть спецификации может быть легко найдена, так как %configure \ упоминается только один раз в спецификации). В моем случае решение заключалось в том, чтобы полностью удалить mcrypt из части configure и добавить его к этапам build-cgi и build-ztscli. Можно спросить: "Как насчет стадии fpm?" - и это хороший вопрос, но, оказывается, fpm sapi сам построен с минимальным количеством модулей и использует общие общие.

Ответ 3

У меня была такая же проблема, и это было связано с созданием PHP из исходного кода с опцией ./configure --with-mcrypt. Похоже, что если PHP построен с флагом --with-mcrypt, тогда нет необходимости указывать extension=mcrypt.so в php.ini. Это вызывает предупреждение, упомянутое выше.

Ответ 4

Отключить отчет об ошибках в разработке, вы можете отключить его из файла index.php, как показано ниже.

case 'development':
        error_reporting(-1);
        ini_set('display_errors', 0);
break;