致命错误:调用未定义的函数mcrypt_encrypt()

问题描述 投票:58回答:17

注意:MCrypt支持的库依赖于多年未更新,MCrypt不应再被视为加密数据的可行或安全方法。更重要的是,MCrypt在PHP 5中被弃用,并在PHP 7中完全删除。如果你有任何代码运行MCrypt,你应该重构它以使用更现代的加密库。


有谁知道为什么这个错误消息:(Call to undefined function mcrypt_encrypt() )显示我在下面运行以下代码?

我错过了一些步骤,也许在这个代码可以工作之前我必须做的任何设置?

$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)));
php mcrypt
17个回答
33
投票

PHP版本5.2.8对我有用的是打开php.ini并通过删除php_mcrypt.dll允许;扩展,即更改:

;extension=php_mcrypt.dllextension=php_mcrypt.dll


3
投票

是否启用了mcrypt?您可以使用phpinfo()查看是否。


3
投票

还有一件事:如果您通过Apache等Web服务器提供PHP,请尝试重新启动Web服务器。这将“重置”可能存在的任何PHP模块,从而激活新配置。


3
投票

假设你正在使用debian linux(我正在使用Linux mint 12,问题出现在Ubuntu 12.04.1 LTS服务器上,我已经进入了。)

我建议接受@dkamins的建议,并确保在php5安装上安装并激活mcrypt。使用“sudo apt-get install php5-mcrypt”进行安装。我的笔记如下。

使用PHP版本PHP Version 5.3.10-1ubuntu3.4,如果按照@John Conde的建议打开phpinfo(),你可以在web服务器上创建测试文件(例如创建状态页面testphp.php,其中只有内容“”可以通过浏览器在服务器上访问)

在浏览器中打开时,我发现状态页面上没有启用或禁用状态。当我打开@Anthony Forloney提到的php.ini文件时,想要取消注释;extension=php_mcrypt.dll to extension=php_mcrypt.dll

我来回切换并重新启动Apache(我正在运行Apache2,你可以在我的设置中使用sudo /etc/init.d/apache2 restart重新启动,或者当你在那个目录中只是sudo restart,我相信)改变而没有改变,但一切都没有。我拿了@dkamins的建议然后用“sudo apt-get install php5-mcrypt”来安装包,然后重新启动apache,如上所述。然后我的错误消失了,我的应用程序工作正常。


3
投票

如果您使用的是php5-fpm,请记得在安装mcrypt后重新启动它

服务php5-fpm重启


3
投票

如果你在这里使用ubuntu 14.04是解决这个问题的方法:

首先检查php5-mcrypt已经安装了qazxsw poi

如果已安装,只需运行这两个命令或安装并运行这两个命令

apt-get install php5-mcrypt

我希望它能奏效。


1
投票

用于基于Linux(Fedora)

$ sudo php5enmod mcrypt
$ sudo service apache2 restart

通过向PHP.ini添加:'extension = mcrypt.so'来启用该模块。 (/etc/php.ini中)

yum -y install php-mcrypt

完成!


1
投票

对我来说,它有助于卸载mcrypt:

systemctl restart httpd.service

并只需重新安装它:

sudo apt-get purge php5-mcrypt

并且不要忘记如上所述重启apache。

不知道为什么以及如何在我的情况下这是不同的(使用配置了php55的vm),但也许这将有助于其他人。我也遇到过像xcache这样的其他模块的问题......


0
投票

检查并安装php5-mcrypt:

sudo apt-get install php5-mcrypt

89
投票

如果你最近更新到ubuntu 14.04这里是解决这个问题的方法:

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

28
投票

对于窗户

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

对于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

对于Ubuntu

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

还是行不通?

sudo php5enmod mcrypt && sudo service apache2 restart


18
投票

您没有安装mcrypt库。

有关更多信息,请参阅http://www.php.net/manual/en/mcrypt.setup.php

如果您使用的是共享主机,则可以要求您的提供商进行安装。


在OSX中,您可以通过自制软件轻松安装mcrypt

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

然后将此行添加到/etc/php.ini。

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

13
投票

如果您使用的是PHP 7.2或更高版本:

此函数在PHP 7.1.0中已弃用,在PHP 7.2.0中已被删除。

来源:http://php.net/manual/en/function.mcrypt-encrypt.php

所以你必须更换php代码并找到没有mcrypt的解决方案。

或者,我刚刚发现,您仍然可以在PHP 7.2.0中使用mcrypt,但您必须将其安装为PHP扩展社区库。 (https://pecl.php.net/

在Debian / Ubuntu Linux上发布:

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install php7.2-dev
sudo apt-get -y install libmcrypt-dev

然后:

sudo pecl install mcrypt-1.0.1

资料来源:https://www.techrepublic.com/article/how-to-install-mcrypt-for-php-7-2/


11
投票

在Ubuntu下我遇到了问题并解决了它

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

7
投票

在ubuntu 14.10上:

安装模块mcrypt

sudo apt install php5-mcrypt

在apache2上启用模块mcrypt

sudo a2enmod mcrypt

重新加载模块配置

sudo service apache2 restart

5
投票

在Linux Mint上17.1 Rebecca - 调用未定义的函数mcrypt_create_iv ...

通过在php.ini中添加以下行来解决

extension=mcrypt.so

之后一个

service apache2 restart

解决了......


4
投票

对于缺少mcrypt的PHP 7版本,我遇到了同样的问题。

这对我有用。

sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get upgrade
sudo service apache2 restart (if needed)
© www.soinside.com 2019 - 2024. All rights reserved.