Erreur fatale: appel à la fonction indéfinie mcrypt encrypt()
Remarque: les bibliothèques dont dépend le support MCrypt n'ont pas été mises à jour depuis des années et MCrypt ne devrait plus être considéré comme une méthode viable ou sécurisée de chiffrement des données. De plus, MCrypt a été déprécié en PHP 5, et supprimé entièrement en PHP 7. Si vous avez un code qui exécute MCrypt, vous devez le refactoriser pour utiliser une bibliothèque de cryptage plus moderne.
Personne Ne sait pourquoi ce message d'erreur: (Call to undefined function mcrypt_encrypt() )
affiche lorsque j'exécute le code suivant ci-dessous?
Suis-Je il manque quelques étapes peut-être n'importe quel paramètre en PHP que je dois faire avant que ce code puisse fonctionner?
$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)));
17 réponses
Ce qui avait fonctionné pour moi avec la version 5.2.8 de PHP, c'était d'ouvrir php.ini
et d'autoriser l'extension php_mcrypt.dll
en supprimant le ;
, c'est-à-dire en changeant:
;extension=php_mcrypt.dll
de extension=php_mcrypt.dll
Si vous avez récemment mis à jour ubuntu 14.04 voici la solution à ce problème:
$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
$ sudo php5enmod mcrypt
$ sudo service apache2 restart
Pour windows
;extension=php_mcrypt.dll to extension=php_mcrypt.dll
then restart your apache server
Pour 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
Pour Ubuntu
sudo apt-get install php5-mcrypt
sudo service apache2 restart //if server not reloaded automatically
Ne fonctionne Toujours pas?
Sudo php5enmod mcrypt && sudo service apache2 restart
La bibliothèque mcrypt n'est pas installée.
Voir http://www.php.net/manual/en/mcrypt.setup.php pour plus d'informations.
Si vous utilisez un hébergement partagé, vous pouvez demander à votre fournisseur de l'installer.
Dans OSX, vous pouvez facilement installer mcrypt via homebrew
brew install php54-mcrypt --without-homebrew-php
Ajoutez ensuite cette ligne à /etc / php.ini.
extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so"
Sous Ubuntu j'ai eu le problème et l'ai résolu avec
$ sudo apt-get install php5-mcrypt
$ sudo service apache2 reload
Sur ubuntu 14.10:
Installer le module mcrypt
sudo apt install php5-mcrypt
Activer le module mcrypt sur apache2
sudo a2enmod mcrypt
Recharger la configuration du module
sudo service apache2 restart
Sous Linux Mint 17.1 Rebecca-appel à la fonction indéfinie mcrypt_create_iv...
Résolu en ajoutant la ligne suivante Au php.ini
extension=mcrypt.so
Après cela, un
service apache2 restart
Résolu...
Si vous utilisez PHP 7.2 ou supérieur:
Cette fonction a été dépréciée en PHP 7.1.0, et supprimée en PHP 7.2.0.
Source: http://php.net/manual/en/function.mcrypt-encrypt.php
Vous devez donc remplacer le code php et trouver une solution sans mcrypt.
Mcrypt est-il activé? Vous pouvez utiliser phpinfo()
pour voir si elle est.
Encore une chose: si vous servez PHP via un serveur web tel Qu'Apache, essayez de redémarrer le serveur web. Cela "réinitialisera" tous les modules PHP qui pourraient être présents, activant la nouvelle configuration.
En supposant que vous utilisez debian linux (J'utilise Linux mint 12, le problème était sur le serveur Ubuntu 12.04.1 LTS dans lequel j'ai ssh'ed.)
Je suggère de prendre des conseils @ dkamins et de vous assurer que mcrypt est installé et actif sur votre installation php5. Utilisez "sudo apt-get install php5-mcrypt" pour installer. Mes notes ci-dessous.
En utilisant la version de PHP PHP Version 5.3.10-1ubuntu3.4
, si vous ouvrez phpinfo () comme suggéré par @ John Conde, ce que vous faites en créant un fichier de test sur le serveur web (par exemple, créer une page d'état testphp.php avec juste le contenu "" accessible partout sur le serveur via un navigateur)
Je n'ai trouvé aucune présence d'état activé ou désactivé sur la page d'état lorsqu'elle est ouverte dans le navigateur. Quand j'ai ensuite ouvert le php.fichier ini, mentionné par @ Anthony Forloney, pensant décommenter ;extension=php_mcrypt.dll to extension=php_mcrypt.dll
J'ai basculé cela d'avant en arrière et redémarré Apache (Je cours Apache2 et vous pouvez redémarrer dans ma configuration avec sudo /etc/init.d/apache2 restart
ou quand vous êtes dans ce répertoire juste sudo restart
je crois)
avec changement et sans changement, mais tous pas aller. Je a pris des conseils @ dkamins et est allé installer le paquet avec "sudo apt-get install php5-mcrypt", puis redémarré apache comme ci-dessus. Alors mon erreur a disparu et ma demande a bien fonctionné.
Si vous utilisez php5-fpm, remeber pour le redémarrer, après avoir installé mcrypt
Service php5-fpm redémarrer
Si vous utilisez ubuntu 14.04 voici la solution à ce problème:
Vérifiez d'abord que php5-mcryp est déjà installé apt-get install php5-mcrypt
S'il est installé, exécutez simplement cette commande à deux ou installez et exécutez cette commande à deux
$ sudo php5enmod mcrypt
$ sudo service apache2 restart
J'espère que ça marchera.
J'ai eu le même problème pour PHP 7 version de mcrypt manquant.
Cela a fonctionné pour moi.
sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get upgrade
sudo service apache2 restart (if needed)
Pour Linux (Fedora)
yum -y install php-mcrypt
Activer le module en ajoutant: 'extension=mcrypt.so' à PHP.ini. (/etc / php.ini)
systemctl restart httpd.service
Fait!
Pour moi, il a aidé à désinstaller mcrypt avec:
sudo apt-get purge php5-mcrypt
Et réinstallez-le simplement:
sudo apt-get install php5-mcrypt
Et n'oubliez pas de redémarrer apache comme décrit ci-dessus.
Je ne sais pas pourquoi et comment cela était différent dans mon cas (en utilisant une machine virtuelle avec php55 provisionné), mais peut-être que cela aidera quelqu'un d'autre. J'ai aussi eu ce problème avec d'autres modules comme xcache...
Vérifiez et installez php5-mcrypt:
sudo apt-get install php5-mcrypt