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

时间:2013-03-07 23:38:17

标签: php views mamp laravel chmod

我正在阅读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

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

chmod 775 views

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

chmod 775 views之后的权限

drwxrwxr-x@  7 jason  jason  238 Mar  7 17:15 views

chmod 777 views之后,它可以正常工作

drwxrwxrwx@  8 jason  jason  272 Mar  7 17:25 views

chmod 777 views之后它仍然有效

drwxrwxr-x@  8 jason  jason  272 Mar  7 17:25 views

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

编辑2:

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

1 个答案:

答案 0 :(得分:5)

由于(我认为)Lion,网络服务器不再使用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
...

现在,您的文件夹包含权限775,用户jason和群组jason

drwxrwxr-x@ 7 jason jason 238 Mar 7 17:15 storage/views

Laravel将尝试为该文件夹中的每个刀片视图创建一个缓存文件。如果不存在此类文件,它将尝试自动创建该文件。这需要写访问到该文件夹​​,并且由于Apache以_www运行,因此它需要在该目录上以其他进行写访问。

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

现在你可以做的是:

(请记住storage除了storage/views之外还有其他缓存,因此这里的所有内容都在整个storage文件夹中完成)

  • storage目录设置为777(对于开发,这是“ok”)

    chmod -R 777 storage
    
  • 或(更好)chown storage目录到jason:_www,这样您就可以保留775权限,并且您和apache都有足够的权限。

    sudo chown -R jason:_www storage