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

标签 laravel permissions

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

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

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

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

完整错误:

[Mon May 18 10:17:58 2015] [error] [client 86.124.208.14] PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/vhosts/mapper.pavementlayers.com/storage/logs/laravel-2015-05-18.log" could not be opened: failed to open stream: Permission denied' in /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:84\nStack trace:\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 in /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 84

最佳答案

可能是 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。

    关于Laravel 5 : laravel. 日志无法打开:权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30306315/

    相关文章:

    php - Lumen 和 Laravel 的异同

    php - Laravel,管理 Controller - 403 Forbidden

    php - Laravel 字符串降低

    linux - yarn 安装 : EACCES: permission denied, 取消链接 yarn 完整性

    android - 从通过路由器连接的Android设备访问Wamp localhost

    java - 如何设置删除权限?

    mysql - Laravel 和 MySQL 组复制

    laravel - 我在 laravel scout : Your requirements could not be resolved to an installable set of packages 中遇到此错误

    nginx - 使用 nginx 的 Vagrant 文件夹权限

    android - 为什么我得到 "SMS and CALL_LOG permissions warning"