Предупреждение 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

4 ответа

Решение

Ваш 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

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

Как выясняется, 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 и не указывается как общий (эту часть спецификации легко найти, так как %configure \ упоминается только один раз в спецификации). В моем случае решение состояло в том, чтобы полностью удалить mcrypt из части конфигурации и добавить его в build-cgi а также build-ztscli этапы. Кто-то может спросить: "А как насчет стадии fpm?" - и это хороший вопрос, но, оказывается, сам fpm sapi собран с минимумом модулей и использует общие общие.

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

Откройте php.ini и найдите extension=mcrypt.so

Прокомментируйте это, добавив точку с запятой перед расширением имени ;extension=mcrypt.so

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

case 'development':
        error_reporting(-1);
        ini_set('display_errors', 0);
break;
Другие вопросы по тегам