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

Posted

技术标签:

【中文标题】使用未定义的常量 MCRYPT_RIJNDAEL_128 - 假定为“MCRYPT_RIJNDAEL_128”【英文标题】:Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed '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。 【参考方案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

补充说明和说明

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

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

原来如此

php -v

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

下载 PHP 源代码
https://github.com/php/php-src/archive/PHP-5.6.28.zip
    当我尝试执行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 库作为安全模块,并对部分配置文件进行加密。

你需要的是这些步骤。

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

然后配置make并安装它。

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

    然后下载自动配置

    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
    

    然后你必须转到目录级别

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

    并在此目录级别运行 phpize

    /usr/bin/phpize
    ./configure
    make
    sudo make install
    

    修改您的 php.ini 以通过将其插入 php.ini 来启用 mcrypt 扩展

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

【讨论】:

以上是关于使用未定义的常量 MCRYPT_RIJNDAEL_128 - 假定为“MCRYPT_RIJNDAEL_128”的主要内容,如果未能解决你的问题,请参考以下文章

警告:更新到 PHP 7.2 后使用未定义的常量 _ - 假定为“_”(这将在 PHP 的未来版本中引发错误)

php提供的对称加密算法

解密在 PHP 中使用 MCRYPT_RIJNDAEL_256 加密的 Python 字符串

在 node.js 中重新创建 MCRYPT_RIJNDAEL_128

如何让 Ruby AES-256-CBC 和 PHP MCRYPT_RIJNDAEL_128 一起玩得很好

第二部分:如何让 Ruby AES-256-CBC 和 PHP MCRYPT_RIJNDAEL_128 一起玩得很好