Homestead 下,tp5 运行 PHP think make:middleware Check 报错 mkdir ():Permission Denied
一开始执行 php think make:middleware Check -vvv
时是报错没权限,如下图:
百般尝试以后无果,什么 777 755 都不行,所以就重装了 box,重装 box 可以看这里:
【笔记】Windows 10 下重建 Laravel 开发环境 Homestead 和项目
重装后,再运行结果变成如下图报错:$ cd
返回到虚拟机下映射的根目录,$ ls
一看多了一个小写的根目录(我的根目录头字母大写...):
然后从一开始报错 trace 找到框架源代码,发现是生成目录路径时转换成小写了,所以另外生成了小写的目录,但是当我$ cd
到该目录下时,却发现没有生成相应中间件,然后返回大写的原目录,再一次执行命令,结果报错:
再$ cd
到虚拟机映射目录,$ ls -lih
发现,生成小写目录权限是 drwxr-xr-x root root
,
结合之前没权限的报错,我想大概原因就是框架生成小写目录路径的文件夹,但是又没权限执行写入(也就是mkdir(): Permission Denied
),所以没生成中间件,才报错报错file_put_contents(/home/vagrant/WWW/tp5/application/http/middleware/Check.php): failed to open stream: No such file or directory
找不到文件,至于为什么之后没报错mkdir(): Permission Denied
,且生成的小写目录权限不一样,学识有限,有待研究,可能跟下面的链接有关也可能没有。
关于 vagrant up 时 composer 权限的问题:
Composer root permision error during "vagrant up"
Composer update warning
本作品采用《CC 协议》,转载必须注明作者和本文链接
ubuntu
有没有尝试使用过sudo
命令@韩槑槑 好像我之前有sudo过一次,然后才出现
failed to open stream: No such file or directory
是不是sudo过一次生成之后就不用了?@Wayne02 那可能是因为
sudo
生成的文件夹是root
权限组,而不是homestead
可以尝试
sudo chown -R homestead.homestead /home/vagrant/Code/
把 Code 目录下面所有文件权限组都改成homestead
@韩槑槑
之前操作顺序已经记不清了,好像有执行过
sudo php think make:middleware Check
可能是因为你说的这个原因才导致权限报错,因为我现在重新生成项目已经没有报错权限,而是报failed to open stream: No such file or directory
这是项目的权限组: