Lifesign's Blog

laravel 命令行下无法安装 bundle

问题截图:
laravel_openssl_1

如果你有出现如上问题,请先参考博文 《开启php的openssl扩展》

如果你使用的是lamp的套件,比如wamp或者xampp。当你开启openssl,phpinfo中也显示已经载入openssl模块,但是上述代码依然无法运行。

经过排查,原因应该是出在套件对php.ini的加载上,也就是你更改的php.ini和你命令行下使用的php.ini不是同一个。

这里以我使用的wamp举例:

windows平台,命令行下输入php -i find /i "openssl"
laravel_openssl_3
我们看到实际是没有开启的。

输入php --ini
laravel_openssl_4

显示载入的是php目录下的ini

而我们在网址中通过访问phpinfo()得到的是
laravel_openssl_5
实际是apache下的

那问题就转变成wamp是如何加载php.ini的,而且经过查找,存在几个ini文件

“xxwampbinapacheapache2.2.22binphp.ini”
“xxwampbinphpphp5.3.13php.ini”
“xxwampbinphpphp5.3.13phpForApache.ini”
“c:windowsphp.ini”

实际上由于windows不像linux可以有软连接指向同一个php.ini,所以会存在多个php.ini 导致不同的情景下运行会调用不同的php.ini
比如我们在使用wamp托盘菜单里更改的php.ini实际上改的是apachebin下的php.ini 而通过cli下调用的实际上是phpbin的php.ini
这样的话即使我们在wamp中开启了openssl,对于命令行下实际上也是没有开启,所以会报上述错误。

通过在phpinfo()中和cli下php -i 查看Loaded Configuration File可以看到载入的是不同的ini

更详细的可参照:
http://forum.wampserver.com/read.php?2,45057,45079 推荐
http://serverfault.com/questions/408377/wamp-why-two-php-ini-files
http://stackoverflow.com/questions/7555750/configuration-file-php-ini-path

额,上面分析了一堆,,实际上解决也很简单。加上-c参数 指定一个ini即可

php -c “E:wampbinapacheApache2.2.17binphp.ini” artisan bundle:install bob

成功安装
laravel_openssl_6