使用未定义的常量 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,所以我需要从
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 中使用 MCRYPT_RIJNDAEL_256 加密的 Python 字符串
在 node.js 中重新创建 MCRYPT_RIJNDAEL_128