Laravel 5:无法打开laravel.log:权限被拒绝

时间:2015-05-18 14:47:25

标签: laravel permissions denied

要从一开始就阻止你,没有权限问题。 / storage是递归chmodded 777,整个项目文件夹由apache:apache

包围

我甚至将日志文件重命名为...- old并且apache创建了一个新文件...如果它没有实际的写入权限,则不允许创建它。

在CentOS 6.6版(最终版)下运行

从git部署项目,宅基地为我的同事工作。

完整错误:

  

[2015年5月18日星期一10:17:58] [错误] [客户端86.124.208.14] PHP致命   错误:未捕获的异常' UnexpectedValueException'与消息   '流或文件   " /var/www/vhosts/mapper.pavementlayers.com/storage/logs/laravel-2015-05-18.log"   无法打开:未能打开流:权限被拒绝'在   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:84\nStack   追踪:\ n#0   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(88):   独白\处理程序\ StreamHandler-→写(阵列)\ n#1   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37):   独白\处理程序\ RotatingFileHandler-→写(阵列)\ N#2   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(265):   独白\处理程序\ AbstractProcessingHandler->手柄(阵列)\ N#3   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(543):   Monolog \ Logger-> addRecord(400,' exception' Symf ...',Array)\ n#4   /var/www/vhosts/mapper.pavementl in   /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php   第84行

7 个答案:

答案 0 :(得分:43)

可能是SElinux阻止Apache创建此文件。

要测试此功能,您可以使用以下命令暂时禁用SElinux:

setenforce 0

这将使SElinux处于许可模式。这意味着您仍然在SElinux日志文件中收到错误消息,但SElinux不会阻止该命令。

要再次激活SElinux,您可以输入:

setenforce 1

或重新启动CentOS服务器。

不幸的是,我在CentOS上也遇到了Laravel 5的问题,原因是SElinux。 我最终解除了对SElinux的反感,我知道这不是正确的事情,但我没有时间让两个人一起工作!

更新

所以我终于有时间进一步调查这一点,我让SELinux与Laravel 5一起工作。我只是为那些可能遇到这个问题的人更新这篇文章导致禁用SELinux不是上面提到的最佳策略。

需要做三件事:

  1. 文件夹Storage和Bootstrap / Cache需要具有正确的SELinux上下文。这可以通过以下命令来实现。

    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/storage(/.*)?"
    
    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/bootstrap/cache(/.*)?"
    
  2. 需要在目录上应用SELinux上下文。

    restorecon -Rv "/var/www/<Laravel Site>/storage"
    
    restorecon -Rv "/var/www/<Laravel Site>/bootstrap/cache"
    
  3. Apache用户需要拥有在两个目录中创建文件的权限。这可以通过CentOS 7中的ACL实现。

    setfacl -R -m u:apache:rwX storage/
    
    setfacl -R -m u:apache:rwX bootstrap/cache/
    
  4. 您需要做的最后一件事是再次启用SELinux。

答案 1 :(得分:8)

尝试laravel 5

的命令
$ php artisan cache:clear 

$ sudo chmod -R 777 app/storage 

$ composer.phar dump-autoload

这是因为laravel没有写入日志文件的权限,至少在我的情况下是这样。

答案 2 :(得分:2)

这对我有用,Laravel 5.4及以上

$ sudo chmod -R 755 storage/

$ sudo chown -R www-data storage/

$ sudo chgrp -R www-data storage/

$ php artisan cache:clear

$ php artisan config:cache

$ composer dumpautoload

并非所有必要的步骤。

答案 3 :(得分:0)

您必须确保storage文件夹存在。如果您要从git部署,请确保自动跟踪和创建storage文件夹本身。

答案 4 :(得分:0)

在Laravel 5.7上

$ cd / var / www / html / $ php artisan cache:clear 应用程序缓存已清除!

答案 5 :(得分:0)

对于centos 7

   # ausearch -c 'httpd' --raw | audit2allow -M my-httpd
   # semodule -i my-httpd.pp

答案 6 :(得分:0)

由于laravel.log位于存储文件夹中,所以我建议您在Mac的终端上运行此命令。

chmod -Rf 0777 storage