参考了PHP 全局使用 Laravel 辅助函数 dd中的内容,只是针对我自己配置过程中出现的问题进行一次总结。
Composer的COMPOSER_HOME环境变量不同
根据composer官方说明,如果系统没有COMPOSER_HOME环境变量,它在各个系统上的默认值分别为:
- *nix
/home/<user>/.composer
。 - OSX
/Users/<user>/.composer
。 - Windows
C:\Users\<user>\AppData\Roaming\Composer
。
但是我的却不是。我的本级默认地址为~/.cache/composer
,所以最简单的方法是直接使用了export进行导入
export COMPOSER_HOME=$HOME/.composer #将这行加入到.bashrc或.bash_profile或.zshrc
开发环境不同
原文中使用的是vagrant+homestead开发环境,而我本地使用的是vagrant+lnmp的一键安装包,区别就在于homestead环境的登录用户及nginx用户都是vagrant。而我本机的登录用户为vagrant,而nginx用户为www。
全局composer安装后我将auto_prepend_file = /home/vagrant/.composer/vendor/autoload.php加入到php.ini中发现报如下错误:
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Fatal error: Unknown: Failed opening required '/home/vagrant/.composer/vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in Unknown on line 0
但是我在CLI下执行一个test.php程序发现是可以正常调用的。所以第一反应也是www用户没有权限导致。于是我将www用户加入到了vagrant用户组:
usermod -a G vagrant www
到这里以为大功告成,没想到问题依旧如上。
参考了网上的大多数教程,也包括把autoload.php
修改为777权限依然不行。最后的最后我执行下面的命令:
[root@localhost home]# ll
total 0
drwx------. 6 vagrant vagrant 167 Oct 11 17:12 vagrant
看到这里我也是醉了,因为/home/vagrant
的g和o都没有权限,所以导致nginx的www用户都进入不了/home/vagrant
目录所以才会报出Permission denied
。于是我直接
chmod 750 vagrant
其是最根本的原因依然是登录用户与nginx执行用户不一样导致权限问题。不解的是不知道为什么useradd添加的用户家目录是700。猜测可能是和umask
有关
---update---
查了资料发现之所以用户的家目录权限为700是因为在/etc/login.defs
中有有一个配置
UMASK 077 #用户家目录建立的 umask ,因此权限会是 700
所以最终的权限为777-077=700