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