在日志文件中写入时,Laravel 5权限被拒绝

时间:2015-05-21 00:14:40

标签: ubuntu logging laravel-5

我有Ubuntu和Laravel 5框架,我在浏览器中看到白屏 当我更改storage/logs目录权限时,它会有所帮助,但由于“每日”日志配置,我必须每天都这样做。

4 个答案:

答案 0 :(得分:6)

出于明显的安全原因,storagevendor文件夹的权限应保留在775

但是,您的计算机和服务器Apache都需要能够在这些文件夹中写入。例如:当您运行php artisan之类的命令时,您的计算机需要在storage中的日志文件中写入。

您需要做的就是将文件夹的所有权归给Apache:

sudo chown www-data:www-data /path/to/your/project/vendor
sudo chown www-data:www-data /path/to/your/project/storage

然后,您需要将您的计算机(由username引用)添加到服务器Apache所属的组。像这样:

sudo usermod -a -G www-data userName

最常见的是,groupNamewww-data,但您可能希望将其替换为正确的群组。

答案 1 :(得分:2)

  • chmod 777通常存在风险极高的安全风险。
  • chmod 775对于存储文件夹很好,考虑到用户也是 属于Web服务器组。

  • 使用-R非常危险,因为对于文件,根本不需要执行权限。

  • chmod 664用于存储内的文件。 chmod 775用于文件夹

答案 2 :(得分:1)

我遇到了同样的错误。通过使用以下命令,我可以解决它。由于某种原因,它与日志文件无关。

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

答案 3 :(得分:-2)

简答:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

广泛回答:

当您在Apache服务器上启动Laravel 5框架时,默认情况下启用'daily'选项来创建日志文件,有时您会因为文件权限而禁止写入日志文件。 通常,当您拥有php项目时,所有文件都属于www-data用户,并且您当前的用户无需写入日志文件。
关于Laravel,需要将两个不同的进程写入您的日志文件:
1)当您在浏览器中执行某些操作时,Apache服务器(用户www-data);
2)在命令行中执行php artisan something时的Php进程(您的用户)。

当然,每次你想要使用工匠时,你都可以执行sudo -u www-data php artisan your_command(如建议的here),但这有点烦人。
首先,您需要为Apache用户授予供应商和存储目录的权限。 最简单的方法(但不是最好的方式)是执行: sudo chmod -R 777 vendor storage

现在,让我们看看在两种情况下logfile创建时会发生什么。

如果最初通过引发的错误创建了logfile storage/logs/laravel-2015-mm-dd.log php artisan something命令(案例2),日志文件将具有

`-rw-rw-r-- your_user:your_user` 

权限。
如果它是由您的apache服务器创建的(案例1),它在www-data用户下启动,权限将如下所示:

-rw-r-r-- www-data:www-data

所以,我的建议是通过apache更改新创建文件的许可 我们将行umask 000添加到/etc/resolv.conf文件。

echo "umask 000" | sudo tee -a /etc/resolv.conf

现在,

sudo service apache2 restart

就是这样。
请注意,由于存在可能的安全风险,此解决方案仅适用于仅限开发环境