使用未定义常量 MCRYPT_RIJNDAEL_128 - 假设 'MCRYPT_RIJNDAEL_128'

Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed 'MCRYPT_RIJNDAEL_128'

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

Use of undefined constant MCRYPT_RIJNDAEL_128 - assumed '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 扩展加载器有关。 安装成功后根本不需要使用 laravel 命令。 Laravel 框架需要安全模块的 Mcrypt 库和加密一些配置文件。

你需要的就是这些步骤。

  1. 下载 Mcrypt http://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/
    

    和运行 php在此目录级别

    /usr/bin/phpize
    ./configure
    make
    sudo make install
    
  4. 修改您的 php.ini 以启用 mcrypt 扩展,方法是将其插入 php.ini

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

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

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

安装

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

注意:使用未定义常量 MCRYPT_RIJNDAEL_128 – 假设第 83 行 /Library/WebServer/Documents/xxx/config/app.php 中的‘MCRYPT_RIJNDAEL_128′

谷歌搜索此错误消息 return 许多关于如何在 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

有关详细信息,请参阅此 link - http://benohead.com/mac-os-x-php-notice-use-undefined-constant-mcrypt_rijndael_128/

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

我必须做 sudo service php5-fpm restart 才能真正发挥作用。

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

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

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

service php5-fpm restart

我在 Mac OS Sierra 上尝试将 Laravel 部署到 Apache 时也遇到了这个问题。我最终发现安装了 this post that gave step-by-step instructions to resolve this issue. These instructions assume that you have Homebrew;如果您还没有安装它,请将以下内容粘贴到终端 window 中进行安装:

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

这是从上面给出的 post 粘贴的相关步骤:

第 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. 我在第 2 步尝试执行 sudo make install 时出现异常,该异常是由 El Capitan 添加的安全特性 SIP 引起的。 this question, and the resolution to this problem I found in 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

此处有详细说明https://www.php.net/manual/en/install.pecl.windows.php 确保从 PHP 版本

开始选择合适的扩展版本