樂猪先生

PHP全局使用Laravel辅助函数dump和dd

2017-10-12

参考了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进行导入

1
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中发现报如下错误:

1
2
3
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用户组:

1
usermod -a G vagrant www

到这里以为大功告成,没想到问题依旧如上。
参考了网上的大多数教程,也包括把autoload.php修改为777权限依然不行。最后的最后我执行下面的命令:

1
2
3
[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。于是我直接

1
chmod 750 vagrant

其是最根本的原因依然是登录用户与nginx执行用户不一样导致权限问题。不解的是不知道为什么useradd添加的用户家目录是700。猜测可能是和umask有关
—update—
查了资料发现之所以用户的家目录权限为700是因为在/etc/login.defs中有有一个配置

1
UMASK 077 #用户家目录建立的 umask ,因此权限会是 700

所以最终的权限为777-077=700