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


当前回答

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 .

其他回答

永远不要在你的服务器上使用777,但在你自己的机器上,有时我们需要做更多的775,因为

chmod -R 775 storage

意味着

7 - Owner can write
7 - Group can write
5 - Others cannot write!

如果你的服务器不是作为Vagrant运行,它将无法写入,所以你有两个选择:

chmod -R 777 storage

或者将组改为您的webserver用户,假设它是www-data:

chown -R vagrant:www-data storage

这可能有点晚了,但可能对某些人有帮助,更改目录权限对我有用。

假设你的Laravel项目在/var/www/html/目录下。转到这个目录。

cd /var/www/html/

然后修改存储/和引导/缓存/目录的权限。

sudo chmod -R 775 storage/
sudo chmod -R 775 bootstrap/cache/

如果权限775不生效,请尝试设置权限777。(警告!这是最宽松的许可,小心使用)。

sudo chmod -R 777 storage/
sudo chmod -R 777 bootstrap/cache/

cPanel:如果你在cPanel上,没有终端可用,你可以通过右键单击提到的目录和它的子目录来更改权限。

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

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

更新的作曲家

 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命令的更多信息,请检查这个

不要将目录设置为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)'

它也可能是SELinux。(Centos RedHat)

确定终端上SElinux的状态:

$ sestatus

如果status为enabled,写命令禁用SElinux

$ setenforce Permissive

或者你可以执行这个命令

$ sudo setenforce 0