68

注意: 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)));
4

19 回答 19

89

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

$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
$ sudo php5enmod mcrypt
$ sudo service apache2 restart
于 2014-05-29T06:14:55.607 回答
36

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

;extension=php_mcrypt.dllextension=php_mcrypt.dll

于 2010-04-09T01:02:31.093 回答
32

对于窗户

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

对于红帽

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

于 2014-01-09T05:54:01.920 回答
23

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

于 2018-05-18T15:03:32.393 回答
19

您没有安装 mcrypt 库。

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

如果您在共享主机上,您可以要求您的提供商安装它。


在 OSX 中,您可以通过 homebrew 轻松安装 mcrypt

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

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

extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so"
于 2010-04-09T00:57:14.300 回答
11

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

$ sudo apt-get install php5-mcrypt
$ sudo service apache2 reload
于 2013-04-08T13:22:22.657 回答
7

在 ubuntu 14.10 上:

安装模块 mcrypt

sudo apt install php5-mcrypt

在 apache2 上启用模块 mcrypt

sudo a2enmod mcrypt

重新加载模块配置

sudo service apache2 restart
于 2014-11-26T13:21:41.583 回答
6

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

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

extension=mcrypt.so

之后一个

service apache2 restart

解决了...

于 2015-06-12T15:39:09.540 回答
5

对于缺少 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)
于 2017-03-23T11:29:47.993 回答
3

是否启用了 mcrypt?你可以用phpinfo()看看是不是。

于 2010-04-09T00:55:24.193 回答
3

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

于 2011-06-24T16:09:02.357 回答
3

假设您使用的是 debian linux(我使用的是 Linux mint 12,问题出在我 ssh 进入的 Ubuntu 12.04.1 LTS 服务器上。)

我建议接受@dkamins 的建议,并确保您已安装 mcrypt 并在您的 php5 安装中处于活动状态。使用“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。然后我的错误消失了,我的应用程序运行良好。

于 2012-10-19T11:11:27.467 回答
3

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

服务 php5-fpm 重启

于 2015-10-12T11:36:43.183 回答
3

如果您使用 ubuntu 14.04,这里是解决此问题的方法:

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

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

$ sudo php5enmod mcrypt
$ sudo service apache2 restart

我希望它会奏效。

于 2016-05-20T12:56:36.257 回答
2

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

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

Step-2: 解压并复制 php_mcrypt.dll 文件到 ../xampp/php/ext/

Step-3: 打开 ../xampp/php/php.ini 文件并添加一行extension=php_mcrypt.dll

第四步:重启apache,完成!

于 2020-04-01T14:33:25.807 回答
2

在 Ubuntu 18.04 和 php7.0 中

$ sudo apt-get install php7.0-mcrypt

$ sudo systemctl reload apache2
于 2020-04-27T10:38:44.813 回答
1

基于 Linux (Fedora)

yum -y install php-mcrypt

通过将“extension=mcrypt.so”添加到 PHP.ini 来启用该模块。(/etc/php.ini)

systemctl restart httpd.service

完毕!

于 2013-09-14T14:11:09.283 回答
1

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

sudo apt-get purge php5-mcrypt

并简单地重新安装它:

sudo apt-get install php5-mcrypt

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

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

于 2016-09-08T08:06:57.213 回答
0

检查并安装 php5-mcrypt:

sudo apt-get install php5-mcrypt
于 2015-05-05T20:54:23.487 回答