2010-04-09 167 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