事实上,我是laravel的新手,我正在尝试创建我的第一个项目。出于某种原因,我一直得到这个错误(我甚至还没有开始编码)
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423
我读到这与权限有关,但chmod -R 775存储根本没有帮助。
不要将目录设置为777。您应该更改目录所有权。因此,将您当前登录的用户设置为所有者,并将web服务器用户(www-data, apache,…)设置为组。
你可以试试这个:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
然后设置目录权限试试这个:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
更新:
web服务器用户和组取决于您的web服务器和操作系统。要找出您的web服务器用户和组,请使用以下命令。nginx使用:
PS AUX|Grip nginx|grip -v grip
对于apache使用:
Ps aux | egrep '(apache|httpd)'
对于所有在Laravel环境下的Centos 7用户,不需要禁用Selinux,只需要运行这些命令:
yum install policycoreutils-python -y # might not be necessary, try the below first
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache
restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules
最后,确保您的主机、ip和虚拟主机都正确用于远程访问。
Selinux的目的是限制对根用户的访问,所以只有必要的东西可以访问,至少从一般的概述来看,它是额外的安全,禁用它不是一个好的实践,有许多学习Selinux的链接,但在这种情况下甚至不需要它。
要解决这个问题,您需要将目录的所有权更改为web服务器使用的unix用户。
退出虚拟机
使用控制台,转到同步文件夹(vagrant)
sudo chown -R $USER:www-data storage
chmod -R 775存储
尽管我使用VM用户在VM中创建了项目,但文件夹属于真实计算机中的用户;所以,当你试着
现在起作用了。
感谢所有帮我找到答案的人
编辑:
实际上,它仍然不能工作,它仍然给了我一个“拒绝许可”的问题。
这是我所做的,我修改了我的Vagrantfile,像这样:
config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]