No se puede obtener mcrypt para PHP5

29

He hecho esto muchas veces:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude dice que mcrypt está instalado. Ya lo he reinstalado 3 veces. He reiniciado Apache unas 20 veces desde que lo instalé. Cuando miro phpInfo, no veo mcrypt en la lista. Cuando intento ejecutar mi código, dice que la función mcrypt (elegir uno, cualquiera) no existe. mcrypt claramente no está habilitado.

¿Alguien tiene alguna idea de lo que podría estar mal? No sé qué piezas deberían estar dónde y cómo se supone que todo esto encaja.

Instalé PHP 5.5.3

webDeveloperDave
fuente
¿También instaló PHP desde el administrador de paquetes ( apt-get/ aptitude)? El paquete php5-mcryptsolo puede configurar la extensión para php.inilo que "conoce". En segundo lugar, no sé si apache2ctlvuelve a cargar los módulos. La forma "normal" de reiniciar Apache sería algo así sudo service apache2 restart. Tercero, ¿cómo se conecta PHP a su Apache? Si usa algo como (f) cgi o php-fpm (en contraste con mod-php), probablemente tendrá que reiniciar PHP por su cuenta, además de reiniciar Apache.
Henning Kockerbeck
Instalamos todo usando aptitude. apache2ctl se detiene y reinicia apache. Hemos reiniciado la computadora varias veces desde estas instalaciones. Confía en mí cuando digo que apache se ha "reiniciado" desde que instalamos php5-mcrypt, así como PHP. PHP5 funciona bien como un módulo de Apache, es un sitio web escrito en PHP, así que supongo que PHP está instalado como un módulo de Apache. Si voy a / etc / apache2 / mods-enabled php5 está en esa lista. No veo mcrypt en / etc / php5 / mods-available pero si hago sudo aptitude search mcrypt veo 3 cosas instaladas: libmcypt4, mcrypt y php5-mcrypt - ????
webDeveloperDave
¿Cuál php.iniaparece en la salida de phpinfo(aproximadamente de la 5ª a la 7ª entrada)? Debería ser un archivo /etc/php5/. Si busca en ese archivo mcrypt, ¿qué aparece?
Henning Kockerbeck
php.ini está en /etc/php5/apache2/php.ini, hay una sección mcrypt con 2 configuraciones, ambas comentadas: mcrypt.algorithms_dir y mcrypt.modes_dir, los comentarios anteriores dicen que el valor predeterminado es / usr / local / lib / libmcrypt: esos directorios no existen. Esto es lo que primero me dio pistas sobre el hecho de que mcrypt puede no estar instalado, aunque aptitude lo dice. Si sudo aptitude info mcrypt dice que el estado del paquete está instalado - versión 2.6.8-1.3 - dice Conflictos: mcrypt - entonces, ¿qué está diciendo? que este paquete entra en conflicto consigo mismo? ¿Hay una mejor manera de encriptar la información del usuario?
webDeveloperDave
No necesita preocuparse por el mcryptpaquete. Ese es el programa de línea de comandos que usa libmcrypt, al igual que la extensión PHP. Por lo tanto, debe asegurarse de que el paquete libmcrypt4esté instalado. ¿Hay un php.inifragmento en /etc/php5/conf.d/mcrypt.ini? Eso debería cargar la biblioteca. ¿Es ese fragmento cargado por PHP (ver phpinfo)? De nuevo, ¿ha intentado reiniciar Apache con en sudo service apache2 restartlugar de apache2ctl?
Henning Kockerbeck

Respuestas:

62

Prueba esto

sudo php5enmod mcrypt

sudo service apache2 restart
usuario229183
fuente
Funcionó bien y el enlace simbólico (sobre copiar todo) es +1 para mí. ¡Tan votado!
Stefano Mtangoo 01 de
44
Esto funcionó para mí. Pero no necesitaba el primer comando (ln). No tenía mcrypt.ini dentro de la carpeta /etc/php5/apache/conf.d. Ejecutar sudo php4enmod mcrypt funcionó. Archivo allí ahora. El servidor funciona! Muchas gracias.
peterept
1
Gracias está funcionando bien. Pero quiero saber sobre el comando que usaste "sudo php5enmod mcrypt" ... ¿Qué es esto ...? ¿Cuál es el propósito de usar este comando ...?
Elavarasan
1
"sudo php5enmod mcrypt" creará un enlace simbólico en el directorio "/etc/php5/conf.d" con un número de prioridad (predeterminado 20) para que pueda desinstalarlo sin modificar los archivos ini con "sudo php5dismod mcrypt"
Vizjerai
11

Tuve un problema similar en Ubuntu 13.10. Al ejecutar la instalación del compositor, produjo el mismo error, terminando en.

****Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-update-cmd event returned with an error

  [RuntimeException]  
  Error Output:****   

Lo instalé mcrypty php5-mcryptcon aptitude, y aún php -mno aparecía mcryptcomo una extensión cargada:

aptitude install mcrypt
aptitude install php5-mcrypt

Corrí un updatedb, y luego locate mcrypt. Encontré mi mcrypt.inien /etc/php5/conf.d. Sin embargo, todas las otras extensiones (como json) tenían sus archivos .ini en /etc/php5/apache2/conf.dy /etc/php5/cli/conf.d. Estos dos fueron enlaces a ../../mods.available.

Por lo tanto, luego se trasladó mcrypt.inia /etc/php5/available-modules, y establecer los enlaces:

cd /etc/php5/cli/conf.d
ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

Y de manera similar para /etc/php5/apache2/conf.d.

Y voila, apareció en php -m!

usuario239289
fuente
Muchas gracias por esta respuesta. Totalmente me solucionó. Aunque no moví /etc/php5/conf.d/mcrypt.ini, ¿acabo de configurar mis enlaces simbólicos para que apunten a esa ubicación que también funcionó y presumiblemente garantizará que las futuras actualizaciones de mcrypt se carguen automáticamente?
alexleonard
2

Parece que falta el fragmento ini que carga libmcrypt cuando Apache llama a PHP. Debería haber un archivo llamado /etc/php5/apache2/conf.d/mcrypt.inicon el siguiente contenido

; configuration for php MCrypt module
extension=mcrypt.so

Debería poder copiarlo desde las otras configuraciones de integración de PHP como /etc/php5/cli/conf.d/mcrypt.inio /etc/php5/conf.d/mcrypt.ini, dependiendo de lo que esté instalado en su sistema.

Henning Kockerbeck
fuente
2

El módulo mcrypt no está habilitado de forma predeterminada. Habilite el módulo mcrypt y luego reinicie apache ( crédito )

sudo php5enmod mcrypt
sudo service apache2 restart
Boinst
fuente
1

Bueno, ya está. Parece que a veces estamos buscando la forma más enredada de hacer algo tan simple como 'enmod'; ) Al igual que Boinst dice: sudo php5enmod mcrypt. Luego vuelve a cargar apache.

Maximo
fuente