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

时间:2010-04-09 00:49:39

标签: php mcrypt

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


当我在下面运行以下代码时,是否有人知道为什么会出现此错误消息:(Call to undefined function mcrypt_encrypt() )

在此代码可以运行之前,我是否遗漏了一些步骤,也许我需要在PHP中进行任何设置?

$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)));

19 个答案:

答案 0 :(得分:89)

如果您最近更新到ubuntu 14.04,则可以解决此问题:

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

答案 1 :(得分:33)

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

;extension=php_mcrypt.dllextension=php_mcrypt.dll

答案 2 :(得分:28)

对于Windows

;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

答案 3 :(得分: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"

答案 4 :(得分:11)

如果您使用的是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/

答案 5 :(得分:11)

在Ubuntu下我遇到了问题并用

解决了
$ sudo apt-get install php5-mcrypt
$ sudo service apache2 reload

答案 6 :(得分:7)

在ubuntu 14.10上:

安装模块mcrypt

sudo apt install php5-mcrypt

在apache2上启用模块mcrypt

sudo a2enmod mcrypt

重新加载模块配置

sudo service apache2 restart

答案 7 :(得分:5)

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

通过将以下行添加到php.ini

来解决
extension=mcrypt.so

之后

service apache2 restart

解决了......

答案 8 :(得分: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)

答案 9 :(得分: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在我的设置中重新启动,或者当您在{0. 1}}那个目录中时,我相信 变化,没有变化,但一切都没有。我拿了@dkamins的建议然后用“sudo apt-get install php5-mcrypt”来安装包,然后重新启动apache,如上所述。然后我的错误消失了,我的申请工作正常。

答案 10 :(得分:3)

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

答案 11 :(得分:3)

如果您使用的是php5-fpm,请在安装mcrypt

后重新启动它

service php5-fpm restart

答案 12 :(得分:3)

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

首先检查php5-mcryp是否已安装apt-get install php5-mcrypt

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

$ sudo php5enmod mcrypt
$ sudo service apache2 restart

我希望它能奏效。

答案 13 :(得分:3)

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

答案 14 :(得分:1)

基于Linux(Fedora)

yum -y install php-mcrypt

通过添加以下内容启用该模块:' extension = mcrypt.so'到PHP.ini。 (/etc/php.ini中)

systemctl restart httpd.service

完成!

答案 15 :(得分:1)

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

sudo apt-get purge php5-mcrypt

然后只需重新安装:

sudo apt-get install php5-mcrypt

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

不知道为什么以及在我的情况下这是不同的(使用带有配置的php55的vm),但也许这会帮助其他人。我也遇到了一些其他模块的问题,比如xcache ......

答案 16 :(得分:1)

在Ubuntu 18.04和php7.0中

$ sudo apt-get install php7.0-mcrypt

$ sudo systemctl reload apache2

答案 17 :(得分:0)

检查并安装php5-mcrypt:

sudo apt-get install php5-mcrypt

答案 18 :(得分:0)

我的环境:Windows 10,Xampp控制面板v3.2.4,PHP 7.3.2

步骤1:从此处下载适合您系统的版本:https://pecl.php.net/package/mcrypt/1.0.3/windows

第2步:解压缩php_mcrypt.dll文件并将其复制到../xampp/php/ext/

第3步:打开../xampp/php/php.ini文件并添加一行$dirpath = public_path('images'); $name = $request['image']->getClientOriginalExtension(); $filename = time().'_'.$name; $file=$request['image']->move($dirpath, $filename);

第4步:重新启动apache,完成!