事实上,我是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)'

其他回答

执行以下命令,可以在starting of command时添加sudo,具体操作取决于系统:

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 

在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

在Linux中

sudo chown -R www-data:root /var/www/name-project-Laravel
sudo chmod 755 /var/www/name-project-Laravel/storage

我不太想把我的文件夹权限改为777。下面是我解决这个问题的方法。

首先,我改变了在我的本地机器上运行web服务器的用户(我运行nginx,但原则适用于任何地方):

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

之后,我在public/文件夹下创建了另一个index.php文件,以找出谁在运行我的php-fpm版本,以及我将在哪里更改它:

<?php
phpinfo();
?>

重新加载页面后,我发现www-data是用户(在环境部分下)。我还发现我运行的是php 7.1。我开始更改用户:

$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf 
#Look for www-data or the following variables: user, group, listen.user, listen.group.

最后,我给文件夹的权限如下:

sudo chmod -R 775 ./storage/

现在,我确保我是文件夹的所有者通过使用简单的:

ls -al

如果您将服务器和php-fpm用户设置为自己,并且文件夹由root拥有,那么您将继续遇到这个问题。如果您将sudo laravel new <project>作为根目录,就会发生这种情况。在这种情况下,请确保在项目上使用递归chown命令更改user:group设置。在大多数默认情况下,www-data是服务器和php的主要设置,在这种情况下,要确保文件夹不在www-data的范围内。

我的项目安装在我的主目录下。Ubuntu 16.04和Laravel 5.5。

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

假设你的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上,没有终端可用,你可以通过右键单击提到的目录和它的子目录来更改权限。