事实上,我是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存储根本没有帮助。


当前回答

在Laravel中,您应该在存储和缓存目录上设置ACL,以便web服务器用户可以对该目录进行读写。打开一个新终端,运行如下命令:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/

引用:

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

https://linux.die.net/man/1/setfacl

其他回答

对于所有在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的链接,但在这种情况下甚至不需要它。

1-‍nginx用户和php-fpm用户、应用程序所有者用户必须相同:

执行命令sudo vi /etc/nginx/nginx.conf change,如下所示:

user nginx nginx;

执行命令sudo vi /etc/php-fpm.d/www.conf change,如下所示:

listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx

然后重启nginx和php-fpm服务

运行以下命令

sudo chown nginx:nginx -R "your_project_path"

2-在项目路径下执行以下命令更改文件SELinux安全上下文

chcon -R -t httpd_sys_content_t .
chcon -R -t httpd_sys_rw_content_t .

不写任何命令或不给任何权限最简单的方法来解决这个问题

重启系统再试一次

这是我的工作

要解决这个问题,您需要将目录的所有权更改为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"]

您可能已经知道,这个问题是由于没有对日志文件夹(存储的子文件夹)的写权限引起的。

要解决这个问题,需要经过以下一系列步骤

更新的作曲家

 sudo composer self-update

修改存储文件夹写权限

 sudo chmod -R ugo+rw storage

现在存储文件夹应该有权限drwxrwxrwx

从项目根运行以下命令检查权限

ls -l 

同样,如果您在上述步骤后遇到以下错误

 ErrorException chdir(): No such file or directory (errno 2)

只需在项目根文件夹中使用创建一个名为public的文件夹

sudo mkdir public

关于chmod命令的更多信息,请检查这个