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

我有Ubuntu和Laravel 5框架,我看到浏览器中的白色屏幕。
当我更改storage/logs目录权限时,它有帮助,但是我必须每天都这样做,因为“日常”日志configuration。

由于安全原因, 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但是您可能希望将其替换为正确的组。

  • 一般来说,chmod 777的安全风险是非常危险的。
  • 存储文件夹的chmod 775考虑到用户也是很好的
    属于Web服务器组。

  • 与-R其极其危险,因为对于文件执行权限是不是所有的要求。

  • chmod 664存储文件。 chmod 775里面的文件夹

简短的回答:

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

广泛的答案:

当您在Apache服务器上启动Laravel 5框架时,默认启用了“日常”选项来创建日志文件,但是有时您会因为文件权限而被禁止写入日志文件。
通常情况下,当你有php项目时,所有文件都属于www-data用户,而你当前的用户不需要写日志文件。
关于Laravel,两个不同的进程需要写入你的日志文件:
1)当你在浏览器中做某事时,Apache服务器(用户www-data
2)PHP进程(你的用户)当你在命令行中执行php artisan something

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

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

如果最初的日志文件storage/logs/laravel-2015-mm-dd.log是通过php artisan something提出的错误命令创建的(情况2),日志文件将会

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

权限。
如果它是由你的apache服务器(情况1)创建的,这个服务器在www-data用户下可以正常启动,权限将如下所示:

 -rw-rr-- www-data:www-data 

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

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

现在,

 sudo service apache2 restart 

而已。
请注意,此解决方案仅适用于开发环境 ,因为可能存在安全风险。