2010-04-09 36 views
50

NOTA: Las bibliotecas que necesitan compatibilidad con MCrypt no se han actualizado en años y MCrypt ya no se debe considerar un método viable o seguro de cifrado de datos. Además, MCrypt ha quedado obsoleto en PHP 5 y eliminado por completo en PHP 7. Si tiene algún código que ejecute MCrypt, debe refactorizarlo para utilizar una biblioteca de cifrado más moderna.Error fatal: llamada a la función no definida mcrypt_encrypt()


¿Alguien sabe por qué este mensaje de error: (Call to undefined function mcrypt_encrypt()) pantallas cuando corro el siguiente código de abajo?

¿Me faltan algunos pasos, quizás alguna configuración en PHP tengo que hacer antes de que este código pueda funcionar?

$key = 'password to (en/de)crypt'; 
$string = 'string to be encrypted'; 

$test = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), 
      $string, MCRYPT_MODE_CBC, md5(md5($key))); 
+0

¿Qué versión de PHP está ejecutando? –

+0

Tal vez tenga PHP 4.0.1, esta es una función 4.0.2. Corre apropiadamente aquí. – Ben

+5

Tengo la versión 5.2.8 y también recibo el error de función no definida. –

Respuesta

28

Lo que había trabajado para mí con la versión de PHP 5.2.8, fue abrir php.ini y permitir la extensión php_mcrypt.dll quitando el ;, es decir, cambiar:

;extension=php_mcrypt.dll a extension=php_mcrypt.dll

3

¿Está habilitado mcrypt? Puede usar phpinfo() para ver si lo es.

18

No tiene la biblioteca mcrypt instalada.

Consulte http://www.php.net/manual/en/mcrypt.setup.php para obtener más información.

Si está en alojamiento compartido, puede solicitarle a su proveedor que lo instale.


En OSX puede instalar fácilmente a través de mcrypt homebrew

brew install php54-mcrypt --without-homebrew-php 

A continuación, añadir esta línea a /etc/php.ini.

extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so" 
+0

Gracias, Para mí, la ruta era un poco diferente: extension = "/ usr/local/Cellar/php55-mcrypt/5.5.22/mcrypt.so" – anshuman

+0

Para mí, no tuve que editar php.ini, ya estaba establecido. Y 'phpXX', XX es para la versión que estás usando. ('php -v' en la terminal para averiguarlo.) –

+0

Ni siquiera tengo la ruta'/usr/local/Cellar/'. ¿Estas seguro que esto es correcto? – dspacejs

3

Uno más cosa: si está sirviendo PHP a través de un servidor web como Apache, intente reiniciar el servidor web. Esto "reiniciará" cualquier módulo PHP que pueda estar presente, activando la nueva configuración.

3

Suponiendo que está usando Debian Linux (estoy usando Linux Mint 12, era un problema en el servidor de Ubuntu 12.04.1 LTS I ssh'ed a.)

Sugiero tomar consejos @dkamins y asegurarse de que tiene mcrypt instalado y activo en su instalación de php5. Use "sudo apt-get install php5-mcrypt" para instalar. Mis notas a continuación.

Uso de PHP versión PHP Version 5.3.10-1ubuntu3.4, si phpinfo abierta() según lo sugerido por @ John Conde, lo que lo hace mediante la creación de archivo de prueba en el servidor web (por ejemplo, crear página de estado testphp.php con sólo el contenido "" en cualquier lugar accesible en el servidor a través del navegador)

No encontré presencia de estado habilitado o deshabilitado en la página de estado cuando se abre en el navegador. Cuando abrí el php.ini, mencionada por @Anthony Forloney, pensando que descomentar ;extension=php_mcrypt.dll to extension=php_mcrypt.dll

I toggled que un lado a otro y se reinicia Apache (Estoy corriendo Apache 2 y se puede reiniciar en mi configuración con sudo /etc/init.d/apache2 restart o cuando se encuentre en ese directorio simplemente sudo restart Creo) con cambios y sin cambios, pero todos no van. Tomé el consejo de @dkamins y fui a instalar el paquete con "sudo apt-get install php5-mcrypt" y luego reinicié Apache como se indica arriba. Entonces mi error desapareció y mi aplicación funcionó bien.

11

Bajo Ubuntu tuve el problema y lo resolvió con

$ sudo apt-get install php5-mcrypt 
$ sudo service apache2 reload 
+0

funcionó para mí. ¡Pero tuve que volver a cargar Apache manualmente! – Peter

1

para Linux basado (Fedora)

yum -y install php-mcrypt 

Habilitar el módulo añadiendo: 'extension = mcrypt.so' a PHP. ini. (/etc/php.ini)

systemctl restart httpd.service 

¡Hecho!

24

Para ventanas

;extension=php_mcrypt.dll to extension=php_mcrypt.dll 
then restart your apache server 

para RedHat

sudo yum install php55-mcrypt //if php5.5 
sudo yum install php-mcrypt //if less than 5.4 
sudo service httpd restart //if apache 2.4 
sudo /etc/init.d/httpd restart //if apache 2.2 or less 

para Ubuntu

sudo apt-get install php5-mcrypt 
sudo service apache2 restart //if server not reloaded automatically 

Todavía no funciona?

sudo php5enmod mcrypt && sudo service apache2 restart

82

Si ha actualizado recientemente a Ubuntu 14.04 aquí es la solución a este problema:

$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ 
$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 
+3

¡Funcionó! ¡Gracias!. Solo con las dos últimas líneas. –

+1

Tu respuesta es mejor que la aceptada. – Fuser97381

+3

'mcrypt.ini' ya estaba en'/etc/php5/mods-available/'en mi instalación, así que solo tuve que ejecutar php5enmod. – nullability

7

en Ubuntu 14.10:

Montar el módulo mcrypt

sudo apt install php5-mcrypt 

Habilitar módulo mcrypt en apache2

sudo a2enmod mcrypt 

módulo de recarga de configuración

sudo service apache2 restart 
+3

Creo que quieres decir: 'sudo php5enmod mcrypt' –

+0

' php5enmod' y 'php5dismod' son nuevos comandos introducidos en los sistemas debian para php (> = 5.4.0 ~ rc6-1). De acuerdo con este post http://php.net/manual/fr/mcrypt.setup.php#116231 solo tienes que hacer sudo 'apt-get install php5-mcrypt'' sudo php5enmod mcrypt' 'sudo service apache2 reload' – alphayax

0

Comprobar e instalar php5-mcrypt:

sudo apt-get install php5-mcrypt 
5

En Linux Mint 17,1 Rebecca - Llame a mcrypt_create_iv función no definida ...

resuelve añadiendo la siguiente línea para php.ini

extension=mcrypt.so 

Después de que un

service apache2 restart 

lo resolvió ...

3

Si está usando php5-FPM hacer remeber reiniciarlo, después de instalar mcrypt

servicio de reinicio php5-FPM

3

Si usando Ubuntu 14.04 aquí es la solución a este problema:

En primer lugar comprobar php5-mcryp ya está instalado apt-get install php5-mcrypt

Si instalado, basta con ejecutar este comando dos o instalar y ejecutar este comando dos

$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 

Espero que funcione.

1

Para mí ayudó a desinstalar mcrypt con:

sudo apt-get purge php5-mcrypt 

y simplemente volver a instalarlo:

sudo apt-get install php5-mcrypt 

y no se olvide de reiniciar Apache como se describió anteriormente.

No sé por qué y cómo esto fue diferente en mi caso (usando una vm con php55 aprovisionado), pero tal vez esto ayude a otra persona. También tuve este problema con algunos otros módulos como xcache ...

3

Tuve el mismo problema para PHP 7 versión de mcrypt faltante.

Esto funcionó para mí.

sudo apt-get update 
sudo apt-get install mcrypt php7.0-mcrypt 
sudo apt-get upgrade 
sudo service apache2 restart (if needed) 
+0

¡Esto funciona! Pero solo necesitaba php7.0-mcrypt. Después de instalarlo y reiniciar Apache, ahora muestra mcrypt en phpinfo(); 'Registros de flujo registrados \t zlib. *, String.rot13, string.toupper, string.tolower, string.strip_tags, convert. *, Consumido, dechunk, convert.iconv. *, Mcrypt. *, Mdecrypt. *' –

Cuestiones relacionadas