每当我创建一个新视图时,我都要在MAMP上运行Laravel,我必须将CHMOD存储/视图设置为777,然后是775

Jaz*_*zzy 1 php mamp views chmod laravel

我正在阅读Shawn McCool的书(好书),每次我创建一个新视图,并尝试加载它,我得到一个权限错误.

我想知道为什么生成的视图没有读取权限.奇怪的是,如果我chmod到775,我仍然得到错误,我必须777然后775.

任何人都可以对此有所了解,为什么会发生这种情况?

谢谢!

编辑:

添加新视图后出错

file_put_contents(/Users/jason/Sites/laravel1/storage/views/5c4b7b4707d658dffe52d481be6c680e): failed to open stream: Permission denied

Permissions on storage/views
drwxrwxr-x@  7 jason  jason  238 Mar  7 17:15 views
Run Code Online (Sandbox Code Playgroud)

新视图的权限 -rw-r--r--

之后出错 chmod 775 views

 file_put_contents(/Users/jason/Sites/laravel1/storage/views/5c4b7b4707d658dffe52d481be6c680e): failed to open stream: Permission denied
Run Code Online (Sandbox Code Playgroud)

之后的权限 chmod 775 views

drwxrwxr-x@  7 jason  jason  238 Mar  7 17:15 views
Run Code Online (Sandbox Code Playgroud)

之后chmod 777 views,它的工作原理

drwxrwxrwx@  8 jason  jason  272 Mar  7 17:25 views
Run Code Online (Sandbox Code Playgroud)

之后chmod 777 views它仍然有效

drwxrwxr-x@  8 jason  jason  272 Mar  7 17:25 views
Run Code Online (Sandbox Code Playgroud)

但这是扭曲,如果我不使用viewname.blade.php,我没有这个问题.如果我做了viewname.php,则没有错误.它似乎与Blade有关.

编辑2:

相关:始终确保.gitignore这些文件,以便您不会最终使用缓存视图等从您的开发环境拉到您的服务器上.

dua*_*led 5

由于(我认为)Lion,Web服务器不再使用mod_userdir,因此apache不会以您的用户身份运行,而是_www相反,请参阅

user:~$ ps ax -o pid,user,rgroup,comm | grep -Ee "PID|httpd"
  PID USER             RGID COMM
10317 root                0 /usr/sbin/httpd
16516 _www               70 /usr/sbin/httpd
18497 _www               70 /usr/sbin/httpd
...
Run Code Online (Sandbox Code Playgroud)

现在为您的文件夹提供权限775,用户jason和组jason

drwxrwxr-x@ 7 jason jason 238 Mar 7 17:15 storage/views
Run Code Online (Sandbox Code Playgroud)

Laravel将尝试为该文件夹中的每个刀片视图创建一个缓存文件.如果不存在此类文件,它将尝试自动创建该文件.这需要写访问到文件夹,因为运行Apache _www它要求写在该目录接入.

但是,一旦文件存在,该文件就归该文件所有_www,因此Apache不再需要对该storage/views目录的写访问权限.直到创建新视图...

现在你能做的是:

(记住,还有其他的缓存太storage比其他storage/views,所以这里的一切是对整个完成的storage文件夹)