如何修复错误:laravel.log无法打开?

FRR*_*FRR 135 php laravel

我在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
Run Code Online (Sandbox Code Playgroud)

我读过这与权限有关,但chmod -R 775 storage根本没有帮助.

权限

Ham*_*ami 205

永远不要将目录设置为777.你应该改变目录所有权.因此,将您作为所有者登录的当前用户和Web服务器用户(www-data,apache,...)设置为组.你可以试试这个:

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
Run Code Online (Sandbox Code Playgroud)

然后设置目录权限试试这个:

chmod -R 775 storage
chmod -R 775 bootstrap/cache
Run Code Online (Sandbox Code Playgroud)

更新:

Web服务器用户和组依赖于您的Web服务器和操作系统.找出您的Web服务器用户和组使用以下命令的内容.对于nginx使用:

ps aux|grep nginx|grep -v grep

用于apache:

ps aux | egrep '(apache|httpd)'

  • 谢谢!简而言之,您也可以这样做:`sudo chown -R {您当前的用户}:www-data storage bootstrap/cache` (3认同)
  • @MattD我想Mac上的apache组是`_www`尝试这个`sudo chgrp -R _www bootstrap / cache`。看看这篇文章会有所帮助:/sf/answers/449378681/ (3认同)
  • 这应该是选择的答案,100%同意系统管理员不应该只允许访问所有内容以避免解决真正的问题. (3认同)
  • @RameshPareek你是对的,但我只是想更清楚;) (2认同)
  • 这对我不起作用。我只是得到`chown:www-data:非法组名`。将目录设置为 777 是唯一有效的方法 (2认同)

Ant*_*iro 109

有时我们需要做更多,因为

chmod -R 775 storage
Run Code Online (Sandbox Code Playgroud)

手段

7 - Owner can write
7 - Group can write
5 - Others cannot write!
Run Code Online (Sandbox Code Playgroud)

如果您的网络服务器没有以Vagrant身份运行,它将无法写入,因此您有两个选择:

chmod -R 777 storage
Run Code Online (Sandbox Code Playgroud)

或者将组更改为您的网络服务器用户,假设它是www-data:

chown -R vagrant:www-data storage
Run Code Online (Sandbox Code Playgroud)


FRR*_*FRR 49

所以,如果其他人遇到这个问题,这就是你做的.

  1. 离开虚拟机
  2. 使用控制台,转到同步文件夹(vagrant)
  3. __CODE__

即使我使用VM用户在VM中创建了项目,该文件夹也属于真实计算机中的用户; 所以,当我试图做chmod 777时,我得到了chmod 775.

现在它正在运作.

感谢所有帮助我解决这个问题的人

编辑:

实际上,它没有工作,它仍然给了我一个"许可被拒绝"的问题.

这就是我做的,我像这样修改了我的Vagrantfile:

config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
Run Code Online (Sandbox Code Playgroud)

  • 所有人都不应该使用777. (19认同)
  • 这绝对不是公认的答案。它是可怕的。永远不要设置 777。永远。 (2认同)

Dan*_*rst 26

您需要调整的权限storagebootstrap/cache.

  • cd 进入你的Laravel项目.
  • sudo chmod -R 777 storage
  • sudo chmod -R 777 bootstrap/cache

根据您的Web服务器的设置方式,您可以更加具体地使用您的权限,并且只将它们授予您的Web服务器用户.谷歌WEB SERVER NAME Laravel file permissions了解更多信息.

在撰写本文时,这是针对Laravel 5.4

  • 每当某些内容适用于 777 而不适用于 755 或 775 时,则意味着您的服务器未使用相应的用户,例如:`nginx`、`apache`、`httpd`、`www-data` 等... (2认同)

Ham*_*hid 25

可能会迟到但可能会帮助某人,更改目录权限对我有用。

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

cd /var/www/html/
Run Code Online (Sandbox Code Playgroud)

然后更改storage/bootstrap/cache/目录的权限。

sudo chmod -R 777 storage/
sudo chmod -R 777 bootstrap/cache/
Run Code Online (Sandbox Code Playgroud)

  • 授予“storage”目录“777”权限意味着您为攻击者提供了炸毁整个系统的密钥。不要这样做。 (14认同)

Tur*_*nlı 18

也可能是SELinux。(Centos,RedHat)

确定终端上SElinux的状态:

$ sestatus
Run Code Online (Sandbox Code Playgroud)

如果启用了状态,请使用write命令禁用SElinux

$ setenforce Permissive
Run Code Online (Sandbox Code Playgroud)

或者您可以执行此命令

$ sudo setenforce 0

谢谢

  • 这是唯一有效的方法,您能否解释一下它的作用? (4认同)
  • @hack4mer 您可以阅读有关 seLinux 的更多信息。https://en.wikipedia.org/wiki/Security-Enhanced_Linux (2认同)

Dav*_*lov 12

添加 composer.json

"scripts": {
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
     ]
}
Run Code Online (Sandbox Code Playgroud)

composer install


gau*_*ini 11

运行以下命令,您可以sudo在命令启动时添加取决于您的系统:

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 
Run Code Online (Sandbox Code Playgroud)

  • 永远不要使用 777。有了 777 权限,您就可以授予任何具有连接权限的人对具有这些权限的文件或目录的完全访问权限。他们可以以任何他们选择的方式改变它们,包括恶意的。许多帐户黑客事件源于 777 权限。 (2认同)

Thi*_*ena 11

如果你使用 cmd

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
Run Code Online (Sandbox Code Playgroud)

如果你使用图形界面

首先转到项目并右键单击存储并检查属性并转到权限选项卡

在此处输入图片说明

使用以下代码更改权限

sudo chmod -R 777 storage
Run Code Online (Sandbox Code Playgroud)

那么你的文件属性可能是

在此处输入图片说明

然后检查您的设置并执行 laravel 命令它会工作:)


San*_*lla 9

只需从项目根目录运行以下命令 -

sudo chmod -R 775 storage
sudo chown -R $USER:www-data storage
Run Code Online (Sandbox Code Playgroud)


Dan*_*tos 8

对于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
Run Code Online (Sandbox Code Playgroud)

最后,请确保您的主机,ip和虚拟主机均正确可用于远程访问。

Selinux旨在限制访问权限,即使是root用户也是如此,因此只能访问必要的内容,至少在通论上来说,这是额外的安全性,禁用它不是一个好习惯,学习Selinux的链接很多,但是为此甚至不需要。


Sad*_*dan 6

最大的人建议更改文件权限 777 或 775,我认为这不是解决此问题的合适方法。您只需要更改storagebootstrap文件夹的所有权。

在下面的图像中,您可以看到我的所有文件/文件夹都在 root 用户下(存储和引导程序除外,因为我更改了所有权),但我以管理员身份登录(在更改所有权之前),这就是为什么它总是拒绝授予权限。所以我需要将这两个文件夹的所有权更改为管理员

那么我是如何做到这一点的,请转到您的项目目录并运行以下命令。 sudo chown -R yourusername:www-data storage, sudo chmod -R ug+w storage, sudo chown -R yourusername:www-data bootstrap, sudo chmod -R ug+w bootstrap


Meh*_*hdi 6

1- ? nginx 用户和 php-fpm 用户和 app owner-user 必须相同:

运行命令sudo vi /etc/nginx/nginx.conf更改如下:

user nginx nginx;
Run Code Online (Sandbox Code Playgroud)

运行命令sudo vi /etc/php-fpm.d/www.conf更改如下:

listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
Run Code Online (Sandbox Code Playgroud)

然后重启nginx和php-fpm服务

在命令下运行

sudo chown nginx:nginx -R "your_project_path"
Run Code Online (Sandbox Code Playgroud)

2- 通过在项目路径中运行以下命令来更改文件 SELinux 安全上下文

chcon -R -t httpd_sys_content_t .
chcon -R -t httpd_sys_rw_content_t .
Run Code Online (Sandbox Code Playgroud)


Pra*_*tik 5

在Laravel中,您应该在storagecache目录上设置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/
Run Code Online (Sandbox Code Playgroud)

参考文献:

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


Pro*_*Roy 5

我坚持这个问题尝试了不同的命令,但这些将有助于解决问题

php artisan route:clear
php artisan config:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

希望它也帮助了其他人。


小智 5

我设法修复它,因为我只通过此命令授予权限:

复制代码

sudo chmod -R 775 storage
Run Code Online (Sandbox Code Playgroud)

修复方法是添加以下内容:

复制代码

sudo chmod -R ugo+rw storage
Run Code Online (Sandbox Code Playgroud)