安装 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 $PATH
和which 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 扩展的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 中需要 Mcrypt PHP 扩展 [重复]
Laravel Artisan Migrate 安装 [需要 mcrypt php 扩展]