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

Posted

技术标签:

【中文标题】Laravel 5:laravel.log 无法打开:权限被拒绝【英文标题】:Laravel 5: laravel.log could not be opened: Permission Denied 【发布时间】:2015-07-30 03:23:34 【问题描述】:

为了从一开始就阻止您,没有权限问题。 /storage 递归 chmodded 777 并且整个项目文件夹由 apache:apache chowned

我什至将日志文件重命名为 ...-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): Monolog\Handler\StreamHandler->write(Array)\n#1 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\RotatingFileHandler->write(Array)\n#2 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(265): Monolog\Handler\AbstractProcessingHandler->handle(Array)\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 在 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php 第 84 行

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

要对此进行测试,您可以使用以下命令暂时禁用 SElinux:

setenforce 0

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

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

setenforce 1

或者重启你的 CentOS 服务器。

不幸的是,我在 CentOS 上也遇到了 Laravel 5 的问题,原因是 SElinux。 我最终禁用了 SElinux。我知道这不是正确的做法,但我还没有时间让两者一起工作!


更新

所以我终于有时间进一步调查这个问题,我让 SELinux 与 Laravel 5 一起工作。我刚刚为可能遇到这个问题的人更新了这篇文章。如上所述,禁用 SELinux 并不是最好的策略。

需要做三件事:

    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(/.*)?"
    

    需要在目录上应用 SELinux 上下文:

    restorecon -Rv "/var/www/<Laravel Site>/storage"
    
    restorecon -Rv "/var/www/<Laravel Site>/bootstrap/cache"
    

    Apache 用户需要有权在两个目录中创建文件。这可以通过 CentOS 7 中的 ACL 来实现:

    setfacl -R -m u:apache:rwX storage/
    
    setfacl -R -m u:apache:rwX bootstrap/cache/
    

您需要做的最后一件事是再次启用 SELinux。

【讨论】:

这适用于 Centos 7.5 该死的 8 小时到垃圾,谢谢托马斯你救了我的命 几乎每个人都只是在全新安装时一起禁用 selinux,这是许多系统管理员的常见做法 完美,在海中找到这个真是太好了,只需制作所有文件夹 777 谢谢你!我的 EC2 Centos 7 实例在今年 3 月到 9 月一直没有时间关闭。显然有些东西已经更新和改变了。我很想知道那是什么。 3 月份天气很好,一直在愉快地写日志! 我花了 8 个小时才找到这个答案。谢谢!【参考方案3】:

laravel 5尝试这些命令

$ php artisan cache:clear 

$ sudo chmod -R 777 app/storage 

$ composer.phar dump-autoload

发生这种情况是因为 laravel 没有写入日志文件的权限,至少对我来说是这样。

【讨论】:

【参考方案4】:

这对我有用,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

并非所有步骤都是必需的。

【讨论】:

【参考方案5】:

在 Laravel 5.7 上

$ cd /var/www/html/ $ php工匠缓存:清除 应用缓存已清除!

【讨论】:

【参考方案6】:

对于centos 7

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

【讨论】:

【参考方案7】:

由于 laravel.log 在 storage 文件夹中,所以我建议你在 Mac 的终端上运行这个命令。

chmod -Rf 0777 storage 

【讨论】:

以上是关于Laravel 5:laravel.log 无法打开:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

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

laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝

Laravel 无法以附加模式打开流或文件“storage/laravel.log”:无法打开流:RHEL8 中的权限被拒绝

Laravel 7 XAMPP Mac OS:无法打开流或文件“../storage/logs/laravel.log”。没有权限

如何修复错误:无法打开 laravel.log 权限被拒绝?

Elastic Beanstalk 上的“laravel.log 无法打开”错误