【问题标题】:Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed 'MCRYPT_RIJNDAEL_128'使用未定义的常量 MCRYPT_RIJNDAEL_128 - 假定为“MCRYPT_RIJNDAEL_128”
【发布时间】:2015-07-11 16:05:43
【问题描述】:

我已成功安装 Laravel,但在运行 php artisan serve 并转到 localhost:8000 后,我收到此错误:

使用未定义的常量 MCRYPT_RIJNDAEL_128 - 假定为 'MCRYPT_RIJNDAEL_128'

我在localhost:8888 上检查了phpinfo(),它说mcrypt 已正确安装。然而我唯一能想到的是,也许我的路径是错误的?

在我的.bash_profile 我有

PATH=/usr/local/bin:$PATH

每次我尝试运行 Laravel 命令时,我都必须在终端中输入:

export PATH="~/.composer/vendor/bin:$PATH" 

我在 Mac 上运行。有没有一种简单的方法可以设置我的bash_profile,这样我就可以在本地主机地址之间不断更改,并且仍然让所有正确的 PHP 函数正常工作?

【问题讨论】:

  • 查看您的 php.ini 以查看是否启用了 mcrypt 扩展。请记住,您可能有两个 PHP 配置文件 - 一个用于控制台,一个用于 Web(也就是说,Artisan serve 命令实际上可能调用内置 PHP Web 服务器,我怀疑它会使用控制台 ini 文件,而不是 Apache 的)。一个好的开始是在您的控制台上尝试 php -m 并查看此扩展是否已启用。
  • MCRYPT_RIJNDAEL_128 需要 libmcrypt 2.4 或更高版本。验证您是否满足最低要求。另请参阅手册中的Mcrypt ciphers

标签: php laravel localhost mcrypt


【解决方案1】:

这里有详细说明https://www.php.net/manual/en/install.pecl.windows.php 确保选择合适的扩展版本作为您的 PHP 版本

【讨论】:

    【解决方案2】:

    我使用 nginx 和 php-fpm,并且已经使用了 apt-get install php5-mcrypt,并将 mcrypt.ini 文件移动到 mods-available

    我必须在 sudo service php5-fpm restart 真正起作用之前。

    【讨论】:

      【解决方案3】:

      ubuntu 上更简单的方法

      • apt-get install php5-mcrypt
      • mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
      • php5enmod mcrypt
      • service apache2 restart

      注意:如果您没有“/etc/php5/conf.d”,请跳过该步骤,它会正常工作

      查看http://php.net/manual/en/mcrypt.installation.php

      【讨论】:

      • mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ 显示错误。 “mv:无法统计‘/etc/php5/conf.d/mcrypt.ini’:没有这样的文件或目录”。但最终工作。谢谢
      【解决方案4】:

      如果您在 ubuntu 或其他风格的 *nix 上看到此内容,则执行以下操作可能会有所帮助:

      service php5-fpm restart
      

      【讨论】:

        【解决方案5】:

        我在尝试将Laravel 部署到Apache 上的Mac OS Sierra 时也遇到了这个问题。我最终找到了this post,它提供了解决此问题的分步说明。这些说明假设您安装了Homebrew;如果您没有安装它,请将以下内容粘贴到终端窗口中进行安装:

        /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
        

        这是从上面给出的帖子中粘贴的相关步骤:

        第 1 步:安装 autoconf 和 mcrypt

        我用homebrew安装autoconf和mcrypt,很简单:

        brew install autoconf mcrypt
        

        如果这对您不起作用,或者您不想使用自制软件,请查看this tutorial

        第 2 步:构建 PHP 扩展

        要构建 PHP 扩展,您需要 PHP 5.4.17 源代码,可以下载 here 并将其解压缩:

        cd ~/Downloads
        unzip PHP-5.4.17.zip
        

        然后使用以下命令构建扩展:

        cd php-src-PHP-5.4.17/ext/mcrypt/
        /usr/bin/phpize
        ./configure
        make
        sudo make install
        

        第 3 步:启用扩展程序

        剩下的就是通过编辑 /etc/php.ini 来启用扩展。如果此文件不存在,请复制 /etc/php.ini.default 并重命名:

        sudo cp /etc/php.ini.default /etc/php.ini
        

        编辑 /etc/php.ini 文件并添加以下内容:

        extension=mcrypt.so
        

        第 4 步:重启 apache 现在只需重新启动 apache 就完成了!

        sudo apachectl restart
        

        补充说明和说明

        我在执行这些步骤时确实遇到了两个问题:

        1. 我必须将我下载的PHP zip 文件与我机器上安装的PHP 版本相匹配。

        原来如此

        php -v
        

        确定版本号,然后更改下载以匹配该版本号。在我的情况下,PHP 版本是 5.6.28,所以我需要从

        下载 PHP 源代码
        https://github.com/php/php-src/archive/PHP-5.6.28.zip
        
        1. 当我尝试执行sudo make install 时,我在第2 步遇到异常,该异常是由El Capitan 添加的安全特性引起的。异常在this question 中进行了概述,我在this answer 中找到了解决此问题的方法。

        应用此答案中的信息更改了上面列出的第 2 步,并将 sudo make install 替换为以下内容:

        mkdir -p /usr/local/lib/php/extensions
        sudo make EXTENSION_DIR='/usr/local/lib/php/extensions' install
        

        请注意,由于此更改,上面的第 4 步也需要更改以包含mcrypt.so 的路径。所以php.ini中必须有以下内容:

        extension=/usr/local/lib/php/extensions/mcrypt.so
        

        【讨论】:

          【解决方案6】:

          我刚刚在 MacOS 中调整了.bash_profile,它起作用了:

          export PATH="/usr/local/sbin:$PATH"
          PHP_AUTOCONF="/usr/local/bin/autoconf"
          source ~/.bash_aliases
          

          【讨论】:

            【解决方案7】:

            Mac 用户特别 - 使用 Home Brew

            安装

            我安装了一个空的 Laravel 安装,并在导航到 http://localhost/kanban/public/ 时收到以下错误消息:

            注意:使用未定义的常量 MCRYPT_RIJNDAEL_128 – 在第 83 行的 /Library/WebServer/Documents/xxx/config/app.php 中假定为“MCRYPT_RIJNDAEL_128”

            搜索此错误消息会返回许多关于如何在 Mac OS X 上安装 mcrypt 的教程(无论是从源代码构建还是使用 Homebrew)。问题是 mcrypt 和 php55-mcrypt 包都正确安装了:

            $ brew install mcrypt
            Warning: mcrypt-2.6.8 already installed
            $ brew install php55-mcrypt
            Warning: php55-mcrypt-5.5.20 already installed
            

            PHP 也正确加载了 Mcrypt:

            $ php -m | grep mcrypt
            mcrypt
            
            $ php -i | grep mcrypt
            Additional .ini files parsed => /usr/local/etc/php/5.5/conf.d/ext-mcrypt.ini,
            Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, mcrypt.*, mdecrypt.*
            mcrypt
            mcrypt support => enabled
            mcrypt_filter support => enabled
            mcrypt.algorithms_dir => no value => no value
            mcrypt.modes_dir => no value => no value
            

            更多详情请参考此链接 - http://benohead.com/mac-os-x-php-notice-use-undefined-constant-mcrypt_rijndael_128/

            【讨论】:

            • 毕竟我还有这个问题,mac有什么提示吗?
            【解决方案8】:

            这个问题与 PHP 扩展加载器有关。 安装成功后根本不需要使用 laravel 命令。 Laravel 框架需要 Mcrypt 库作为安全模块,并对部分配置文件进行加密。

            你需要的是这些步骤。

            1. 下载Mcrypthttp://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download

            然后配置make并安装它。

            1. 下载phphttp://php.net/releases/index.php 建议使用 5.5.14 以上。 (稍后在第 4 步使用此路径)

            2. 然后下载自动配置

              curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
              tar xvfz autoconf-latest.tar.gz
              cd autoconf-2.69/
              ./configure
              make
              sudo make install
              
            3. 然后你必须转到目录级别

              cd ***YOURPHPDIRECTORY***/ext/mcrypt/
              

              并在此目录级别运行 phpize

              /usr/bin/phpize
              ./configure
              make
              sudo make install
              
            4. 修改您的 php.ini 以通过将其插入 php.ini 来启用 mcrypt 扩展

              extension=mcrypt.so
              
            5. 重启网络服务器。

            【讨论】:

              猜你喜欢
              • 2016-06-23
              • 2017-04-06
              • 2022-01-18
              • 2019-06-05
              • 2017-01-03
              • 2014-05-07
              • 2014-04-30
              • 2013-12-12
              • 1970-01-01
              相关资源
              最近更新 更多