【问题标题】:Fatal error: Call to undefined function mcrypt_encrypt()致命错误:调用未定义函数 mcrypt_encrypt()
【发布时间】:2011-02-05 23:03:46
【问题描述】:

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

【问题讨论】:

  • 你运行的是什么版本的 PHP?
  • 也许你有 PHP 4.0.1,这是一个 4.0.2 的函数。在这里正常运行。
  • 我的版本是 5.2.8,我也收到未定义函数错误。
  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准的空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuseRNCryptor,它们提供了完整的解决方案并且正在维护并且是正确的。

标签: php mcrypt


【解决方案1】:

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

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

【讨论】:

  • mcrypt.ini 在我的安装中已经在 /etc/php5/mods-available/ 中,所以我只需要运行 php5enmod。
  • 我必须进行文件复制。非常感谢!
  • 我启动了一台新机器,但没有安装 mcrypt -- 不要忘记在此步骤之前使用$ sudo apt-get install php5-mcrypt 确保已安装 mcrypt,然后检查 askubuntu.com/questions/460837/…
  • 谢谢!!!将主机转移到新的开发服务器后,我遇到了同样的问题......这就是为什么堆栈溢出很棒!
  • 我在 WAMPServer 设置上使用 vagrant ssh,必须先安装 php5-mcrypt,然后执行“sudo php5enmod mcrypt”并重新启动 vagrant,谢谢。
【解决方案2】:

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

;extension=php_mcrypt.dllextension=php_mcrypt.dll

【讨论】:

    【解决方案3】:

    对于窗户

    ;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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我应该怎么做而不是使用这个功能。请提出任何好的方法。
      • 以及如何在 windows 上的 wamp 中安装它?
      【解决方案5】:

      您没有安装 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"
      

      【讨论】:

      • 谢谢,对我来说路径略有不同:extension="/usr/local/Cellar/php55-mcrypt/5.5.22/mcrypt.so"
      • 对我来说,我不必编辑 php.ini,它已经设置好了。 phpXX, XX 是你正在使用的版本。 (php -v 在终端中查找。)
      • 我什至没有路径/usr/local/Cellar/。你确定这是正确的吗?
      【解决方案6】:

      在 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
        

        【讨论】:

        • 我想你的意思是:sudo php5enmod mcrypt
        • php5enmodphp5dismod 是在 debian 系统上为 php (>= 5.4.0~rc6-1) 引入的新命令。根据这篇文章php.net/manual/fr/mcrypt.setup.php#116231 你只需要做 sudo apt-get install php5-mcrypt sudo php5enmod mcrypt sudo service apache2 reload
        【解决方案8】:

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

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

        extension=mcrypt.so
        

        然后一个

        service apache2 restart
        

        解决了...

        【讨论】:

          【解决方案9】:

          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)
          

          【讨论】:

          • 这行得通!但只需要php7.0-mcrypt。安装后,重启 apache,现在在 phpinfo() 上显示 mcrypt; Registered Stream Filters zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              假设您使用的是 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。然后我的错误消失了,我的应用程序运行良好。

              【讨论】:

                【解决方案13】:

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

                服务 php5-fpm 重启

                【讨论】:

                  【解决方案14】:

                  如果您使用的是 ubuntu 14.04,这里可以解决这个问题:

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

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

                  $ sudo php5enmod mcrypt
                  $ sudo service apache2 restart
                  

                  我希望它会起作用。

                  【讨论】:

                    【解决方案15】:

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

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

                    第二步:解压php_mcrypt.dll文件到../xampp/php/ext/

                    第三步:打开../xampp/php/php.ini文件并添加一行extension=php_mcrypt.dll

                    第 4 步:重启 apache,完成!

                    【讨论】:

                    • 详细。为我工作:)
                    【解决方案16】:

                    在 Ubuntu 18.04 和 php7.0 中

                    $ sudo apt-get install php7.0-mcrypt
                    
                    $ sudo systemctl reload apache2
                    

                    【讨论】:

                      【解决方案17】:

                      基于 Linux (Fedora)

                      yum -y install php-mcrypt
                      

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

                      systemctl restart httpd.service
                      

                      完成!

                      【讨论】:

                        【解决方案18】:

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

                        sudo apt-get purge php5-mcrypt
                        

                        然后简单地重新安装它:

                        sudo apt-get install php5-mcrypt
                        

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

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

                        【讨论】:

                          【解决方案19】:

                          检查并安装php5-mcrypt:

                          sudo apt-get install php5-mcrypt
                          

                          【讨论】:

                            猜你喜欢
                            • 2014-03-21
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2012-07-18
                            • 2017-01-25
                            • 2012-06-28
                            • 2014-03-27
                            相关资源
                            最近更新 更多