【问题标题】:Error Installing Laravel: Mcrypt PHP extension required安装 Laravel 时出错:需要 Mcrypt PHP 扩展
【发布时间】:2014-09-20 07:36:23
【问题描述】:

我知道在 SO 上有很多关于此的问题,但没有一个能解决我的问题。我已经检查了他们提到的所有内容似乎都表明 mcrypt 没问题,除了安装 Laravel 时。显然我错过了一些东西。

按照指示 (composer create-project laravel/laravel myproj --prefer-dist) 安装 Laravel 时,我在安装快要结束时收到错误“需要 Mcrypt PHP 扩展”。

据我所知,mcrypt 安装并启用。

Composer 使用/usr/bin/env php

$ which composer       
/usr/local/bin/composer

$ cat /usr/local/bin/composer
#!/usr/bin/env bash
/usr/bin/env php -d allow_url_fopen=On -d detect_unicode=Off /usr/local/Cellar/composer/1.0.0-alpha8/libexec/composer.phar $*%   

我的 PATH 上的 php 是来自 MAMP 的 5.5.10

$ php --version
PHP 5.5.10 (cli) (built: Apr 10 2014 17:49:22)

$ which php
/Applications/MAMP/bin/php/php5.5.10/bin/php   

Mcrypt 已安装并启用

$ php -m | grep mcrypt
mcrypt

$ php --info | grep mcrypt                  
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

$ php --ini                                 
Configuration File (php.ini) Path: /Applications/MAMP/bin/php/php5.5.10/conf
Loaded Configuration File:         /Applications/MAMP/bin/php/php5.5.10/conf/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

$grep mcrypt /Applications/MAMP/bin/php/php5.5.10/conf/php.ini      
extension=mcrypt.so

我也可以通过 MAMP 在 phpinfo 页面中看到 mcrypt support enabled

我错过了什么?

编辑:我在.bash_profile 中有export PATH="/Applications/MAMP/bin/php/php5.5.10/bin:$PATH",可以通过echo $PATHwhich php 确认

更新:一条线索。

如果我将/usr/local/bin/composer 编辑为:

#!/usr/bin/env bash
echo $PATH
/usr/bin/env php --ini

然后运行 ​​composer 我明白了

/usr/bin:/bin:/usr/sbin:/sbin
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         (none)
Scan for additional .ini files in: /Library/Server/Web/Config/php
Additional .ini files parsed:      (none)

为什么那个 PATH 不一样?

【问题讨论】:

  • 可能有点远,但mcrypt.so 文件是否在配置的extensions 目录中?
  • 检查laravel.io/forum/…。 Composer 可能仍在使用系统 PHP 二进制文件(由于 /usr/bin/env php
  • 是的,是的。我可以在 ini 中指定的目录中看到mcrypt.so,并且我的路径上有 MAMP php bin 文件夹(请参阅编辑)
  • 等一下...您编辑上方的所有内容都使用/Applications/MAMP/bin/php/php5.5.10,但您的PATH 包含/Applications/MAMP/bin/php/php5.4.19。我会说那是你的问题。最近升级了 MAMP?
  • 我完全不知所措。这就是我在 mac 上使用 Vagrant 的原因

标签: php laravel composer-php mamp mcrypt


【解决方案1】:

从您发布的内容来看,composer 使用的 PHP 安装似乎与您的 MAMP 版本不同。一种解决方法是改用 PHAR 版本:

wget https://getcomposer.org/composer.phar
php composer.phar create-project laravel/laravel myproj --prefer-dist

如果您的 CLI php 将 mcrypt 注册为已安装的模块,这将解决您的安装问题。

【讨论】:

  • 你会这么认为,但即使这样也行不通(同样的错误)。
  • @Jake - 你安装了 libmcrypt 吗?您是否已验证您能够通过 CLI 运行 mcrypt 函数?
  • @SamDufel 好主意。像php -r 'echo MCRYPT_ENCRYPT, PHP_EOL;' 这样的东西就足够了(结果应该是0
【解决方案2】:

我能找到的唯一方法是编辑 /usr/local/bin/composer 并在其中设置 PATH,如下所示:

#!/usr/bin/env bash
export PATH="/Applications/MAMP/bin/php/php5.5.10/bin:$PATH"
/usr/bin/env php -d allow_url_fopen=On -d detect_unicode=Off /usr/local/Cellar/composer/1.0.0-alpha8/libexec/composer.phar $*

它很hacky,我仍然想知道我的环境发生了什么,但它可以工作!

【讨论】:

    【解决方案3】:

    让 Laravel 在 Apache 上工作

    PHP 版本:PHP 5.5.9

    Ubuntu 版本:14.04

    经过大量的反复试验和搜索,这就是我发现的。我在 Windows 上有一个工作的 laravel 项目,我将它复制到 ubuntu 服务器并开始收到 mcrypt 错误。

    让工匠命令发挥作用

    我做了很多试验和错误,所以每次我之前运行 php5enmod 命令时,我都会收到错误消息。但是在全新安装时没有错误消息。在这一步之后,我得到了工匠命令的工作

    sudo rm /etc/php5/mods-available/mcrypt.ini
    sudo apt-get purge php5-mcrypt
    sudo apt-get install mcrypt
    sudo apt-get install php5-mcrypt
    sudo php5enmod mcrypt
    

    修复浏览器错误

    sudo nano /etc/php5/apache2/php.ini
    

    在 php ini 的动态编译扩展部分下添加以下行

    extension=mcrypt.so
    

    重启 apache 服务器,清除 laravel 缓存,一切正常

    【讨论】:

    • 如何“清除 laravel 缓存”?
    【解决方案4】:

    我也遇到过类似的问题,下面的命令对我有用。

    sudo apt-get install php5-mcrypt

    希望它对你也有用。

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 2017-05-11
      • 2017-09-15
      • 2015-11-10
      • 2017-07-08
      相关资源
      最近更新 更多