安装 Laravel 时出错:需要 Mcrypt PHP 扩展

Posted

技术标签:

【中文标题】安装 Laravel 时出错:需要 Mcrypt PHP 扩展【英文标题】:Error Installing Laravel: Mcrypt PHP extension required 【发布时间】: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 的原因 【参考方案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

希望它对你也有用。

【讨论】:

以上是关于安装 Laravel 时出错:需要 Mcrypt PHP 扩展的主要内容,如果未能解决你的问题,请参考以下文章

安装 php5-mcrypt 时出错

Laravel 中需要 Mcrypt PHP 扩展 [重复]

Laravel 4 - 需要 Mcrypt 扩展

Laravel Artisan Migrate 安装 [需要 mcrypt php 扩展]

在升级到 PHP 5.4.33 的 Centos VPS 上安装 mcrypt 扩展时出错

配置 php 5.6 配置时出错:错误:找不到 mcrypt.h。请重新安装 libmcrypt