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

14

我已成功安装了 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 函数?


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

11

在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’:没有那个文件或目录。”但最终工作正常。谢谢。 - Ashwani Panwar

3
这个问题涉及到PHP扩展加载器。安装成功后,您无需使用laravel命令。Laravel框架需要Mcrypt库来进行安全模块,并加密一些配置文件。
您需要执行以下步骤:
1. 下载Mcrypt:http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download 然后进行配置、编译和安装即可。
  1. Download php http://php.net/releases/index.php Above 5.5.14 are suggested. (Use this path later on step 4)

  2. then download Autoconfigure

    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. then you have to go to directory level

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

    and run phpize within this directory level

    /usr/bin/phpize
    ./configure
    make
    sudo make install
    
  4. modify your php.ini to enable the mcrypt extension by insert this into php.ini

    extension=mcrypt.so
    
  5. Restart web server.

3

特别针对Mac用户 - 使用Home Brew安装

我安装了一个空的Laravel,当导航到http://localhost/kanban/public/时,出现以下错误信息:

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

在Google搜索此错误消息时,会返回许多关于如何在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

Mcrypt也已被PHP正确加载:

$ 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的提示吗? - vaske

2
如果您在Ubuntu或其他*nix版本上看到此消息,可以尝试执行以下操作:
service php5-fpm restart

0
我刚刚在 MacOS 中调整了 .bash_profile ,它起作用了:
export PATH="/usr/local/sbin:$PATH"
PHP_AUTOCONF="/usr/local/bin/autoconf"
source ~/.bash_aliases

0

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

在它真正起作用之前,我不得不执行sudo service php5-fpm restart


0

0

我也曾经在尝试将 Laravel 部署到 Mac OS Sierra 上的 Apache 时遇到了这个问题。最终,我找到了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

如果这对您不起作用,或者您不想使用homebrew,则可以查看此教程

步骤2:构建PHP扩展

要构建PHP扩展,您需要下载可在此处下载的PHP 5.4.17源代码并提取:

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

步骤三:启用扩展

现在只需要通过编辑 /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 压缩文件与我的计算机上安装的 PHP 版本匹配。

所以我做了。

php -v

确定版本号,然后更改下载以匹配该版本号。在我的情况下,PHP 版本是 5.6.28,因此我需要从以下位置下载 PHP 源代码

https://github.com/php/php-src/archive/PHP-5.6.28.zip
  • 在执行sudo make install时,我在第二步遇到了一个异常,这个异常是由于El Capitan添加的安全功能SIP引起的。该异常在this question中有详细描述,而解决此问题的方法则在this answer中找到。
  • 应用来自这个答案的信息更改了上面列出的第二步,并将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
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接