2010-04-09 154 views
50

注意: MCrypt支持依赖的库尚未更新多年,并且MCrypt不应再被认为是可行或安全的数据加密方法。更重要的是,MCrypt在PHP 5中已被弃用,并且在PHP 7中完全删除。如果您有任何运行MCrypt的代码,您应该重构它以使用更现代的加密库。致命错误:调用未定义的函数mcrypt_encrypt()


有谁知道为什么这个错误信息:(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))); 
+0

您运行的是哪个版本的PHP? – 2010-04-09 00:51:47

+0

也许你有PHP 4.0.1,这是一个4.0.2函数。在这里正常运行。 – Ben 2010-04-09 00:54:56

+5

我有版本5.2.8,我也得到未定义的函数错误。 – 2010-04-09 00:57:47

回答

28

了什么,我用PHP 5.2.8版工作,通过移除;开拓php.ini并允许php_mcrypt.dll延伸,即改变:

;extension=php_mcrypt.dllextension=php_mcrypt.dll

3

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

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" 
+0

谢谢,对我来说路径略有不同: extension =“/ usr/local/Cellar/php55-mcrypt/5.5.22/mcrypt.so” – anshuman 2015-03-17 14:09:23

+0

对我来说,我不必编辑php.ini,它已经设置好了。而'phpXX',XX是用于你正在使用的版本。 ('php -v'在终端找出。) – 2015-05-25 05:12:26

+0

我甚至没有路径'/ usr/local/Cellar /'。你确定这是正确的吗? – dspacejs 2015-09-16 13:32:39

3

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

3

假设你使用的是Debian的Linux(我使用Linux Mint的12,问题是Ubuntu的LTS 12.04.1服务器上我ssh'ed到。)

我建议采取@dkamins的建议,并确保你有mcrypt安装并在您的php5安装中处于活动状态。使用“sudo apt-get install php5-mcrypt”进行安装。我的笔记如下。

使用PHP版本PHP Version 5.3.10-1ubuntu3.4,如果你开的phpinfo()由@约翰孔德,您可以通过Web服务器上创建测试文件(如做建议如创建只是内容“”对任何地方访问状态页面testphp.php服务器通过浏览器)

当我在浏览器中打开状态页面时,发现状态页面上没有启用或禁用状态。当我然后打开php。ini文件,通过@Anthony Forloney提到,想取消注释;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。然后我的错误消失了,我的应用程序正常工作。

11

Ubuntu下我有问题,并用

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

为我工作。但我不得不手动重新加载apache! – Peter 2014-04-03 12:03:53

1

用于基于Linux(Fedora的)

yum -y install php-mcrypt 

解决它启用通过添加模块: '延伸= mcrypt.so' 到PHP。 INI。 (/etc/php.ini)

systemctl restart httpd.service 

完成!

24

对于windows

;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

82

如果您最近更新到这里的Ubuntu 14.04是修复了这个问题:

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

工作!谢谢!。只是最后两行。 – 2014-09-09 07:46:10

+1

你的答案比接受的答案好。 – Fuser97381 2014-09-26 19:21:35

+3

'mcrypt.ini'已经在我安装的'/ etc/php5/mods-available /'中,所以我只需要运行php5enmod。 – nullability 2014-09-27 16:02:00

7

在Ubuntu 14.10:

安装模块的mcrypt

sudo apt install php5-mcrypt 

启用模块mcrypt在apache2上

sudo a2enmod mcrypt 

刷新模块配置

sudo service apache2 restart 
+3

我认为你的意思是: 'sudo php5enmod mcrypt' – 2015-10-28 11:05:45

+0

'php5enmod'和'php5dismod'是在debian系统上为php(> = 5.4.0〜rc6-1)引入的新命令。根据这篇文章http://php.net/manual/fr/mcrypt.setup.php#116231你只需要做sudo'apt-get install php5-mcrypt''sudo php5enmod mcrypt''sudo service apache2 reload' – alphayax 2015-11-11 11:27:24

0

检查并安装PHP5-mcrypt的:

sudo apt-get install php5-mcrypt 
5

在Linux Mint的17.1丽贝卡 - 调用未定义功能mcrypt_create_iv ...

解决加入下面一行到php.ini

extension=mcrypt.so 

一个

service apache2 restart 

后解决它?

3

如果你正在使用PHP5-FPM做remeber重新启动它,如果你使用Ubuntu 14.04在这里安装mcrypt的

服务PHP5-FPM重启

3

后是修复了这个问题:

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

如果安装了,只要运行这个两个命令或安装并运行此两个命令

$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 

我希望它能起作用。

1

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

sudo apt-get purge php5-mcrypt 

,只是重新安装:

sudo apt-get install php5-mcrypt 

不要忘记如上所述重新启动Apache。

不知道为什么和这种情况在我的情况下有什么不同(使用配置php55的虚拟机),但也许这会帮助其他人。我也有这个问题,像一些其他模块像xcache ...

3

我有同样的问题PHP 7版本的缺少mcrypt。

这对我有效。

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

这工作!但只需要php7.0-mcrypt。安装完成后重新启动apache,它现在在phpinfo()上显示mcrypt; 'Registered Stream Filters \t zlib。*,string.rot13,string.toupper,string.tolower,string.strip_tags,convert。*,consume,dechunk,convert.iconv。*,mcrypt。*,mdecrypt。*' – 2017-04-19 12:28:30

相关问题