Advertencia de PHP: el módulo ''mcrypt'' ya está cargado
ubuntu-12.10 (3)
A veces esto sucede con php-fpm
, y lo gracioso es que la consola php
no se compara con esto usando el mismo conjunto de archivos .ini al mismo tiempo, lo que demuestra que mcrypt
en realidad no es referenciado dos veces.
Resulta que php-fpm
tiene un conjunto predeterminado de módulos integrados que está intentando cargar, al menos en Linux (ya que eso no es reproducible en FreeBSD). mcrypt
está en esta lista, por lo que cuando un usuario tiene un archivo .ini adicional en su directorio mcrypt
, parece que mcrypt
se carga dos veces.
Una solución dura para esto es agregar el interruptor -n
al php-fpm en el inicio, copiar pnp.ini
a un php-fpm.ini
, incluir todos los módulos en el php-fpm.ini
resultante php-fpm.ini
excepto mcrypt y agregar un interruptor adicional que apunta al archivo ini correcto, por lo que toda la adición parece: -n -c /etc/php-fpm.ini
.
De esta manera, ejecutar php-fpm
no se quejará.
Estoy escribiendo esto aquí, porque esta es la publicación más referenciada en los motores de búsqueda sobre el problema de mcrypt
. Me doy cuenta de que la pregunta fuente era sobre la consola php.
Actualización: estaba usando esta solución, pero es desagradable. Hace algún tiempo he descubierto exactamente por qué sucedió esto. Gastaré algunas palabras más para describir esto, pero esto puede ser aburrido, ya que esto describirá un cierto tipo de falla. Entonces, en mi caso, este problema fue causado por el hecho de que estaba usando una compilación php personalizada, hecha por mí mismo, y ocasionalmente he agregado el mcrypt a la lista de módulos estáticos integrados. Y luego lo agregué nuevamente como un módulo construido, por lo que se cargó dos veces . Esto sucede con una compilación personalizada cuando se hace referencia a mcrypt en la lista de módulos para la secuencia de comandos de configuración, y no aparece como compartido (esta parte de la especificación se puede encontrar fácilmente, ya que %configure /
se menciona solo una vez en la especificación) . En mi caso, la solución fue eliminar el mcrypt por completo de la parte de configuración y agregarlo a las etapas build-cgi
y build-ztscli
. Uno podría preguntar "¿Qué pasa con la etapa fpm?" - y es una buena pregunta, pero resulta que fpm sapi en sí está construido con un mínimo de módulos y utiliza módulos genéricos compartidos .
Cuando ejecuto un comando con PHP, me muestra un error. Por ejemplo, cuando ejecuto php -v
para ver mi versión de PHP, me muestra un error y luego las informaciones sobre PHP:
Módulo ''mcrypt'' ya cargado en Desconocido en la línea 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
Su php.ini
contiene dos o más de estas líneas:
extension=mcrypt.so
Eliminar todos excepto uno.
php.ini
generalmente vive en /etc/php.ini
o /etc/php5/php.ini
. A veces se incluyen archivos .ini adicionales, puede verlos todos con:
$ 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
Tuve el mismo problema y se debió a ./configure --with-mcrypt
PHP desde la fuente con la opción ./configure --with-mcrypt
. Parece que si PHP se construye con el indicador --with-mcrypt
, entonces no hay necesidad de especificar extension=mcrypt.so
en php.ini
. Si lo hace, provoca la advertencia mencionada anteriormente.