【问题标题】:'Failed to open stream: Permission denied' error - Laravel 5.1“无法打开流:权限被拒绝”错误 - Laravel 5.1
【发布时间】:2016-09-04 12:55:27
【问题描述】:

我的 Ubuntu 14.04 和 Laravel 5.1 应用程序出现问题。

当我的应用想要记录时出现此错误:

Uncaught UnexpectedValueException:无法打开流或文件 storage/logs/l:无法打开流:/var/www/releases/20160426/booking_server/vendor/monolog/monolog/src/Monolog/Handler 中的权限被拒绝/StreamHandler.php:87\n堆栈跟踪:\n#0........它继续

我找到了这个解决方案:

sudo php artisan cache:clear 

sudo chmod -R 777 storage 

sudo composer dump-autoload

但问题是它只是暂时的。问题每天都会出现,我总是必须这样做。

我能做些什么来阻止这种情况每天发生?

PD:我有一个每日日志,但如果可能的话,我想保持这种方式。

【问题讨论】:

  • 如何创建每日日志?听起来可能是 cron 作业或类似的以 root 身份运行?
  • 真的我不知道这一切都是由 Laravel 完成的。我只是把 app.php 'log' =>'daily'
  • 谁拥有 laravel 目录?根?您应该将其加入 webserver 组并将您的用户添加到该组中

标签: php laravel ubuntu laravel-5 ubuntu-14.04


【解决方案1】:

不建议在服务器上创建可全局写入的目录 (chmod 777)。 像这样设置权限,(假设网络服务器在组 www-data 下运行)

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

请参考:https://laracasts.com/discuss/channels/general-discussion/laravel-framework-file-permission-security

关于您的问题: 似乎有一个进程正在运行,它每天使用 root 权限创建日志文件。你确定没有相同的 cron 设置吗?

如果没有,请在 storage/logs 目录中运行 ls -l 并将输出粘贴到此处。 (在手动更改权限之前执行此操作)

【讨论】:

    【解决方案2】:

    看起来他们以前在这里处理过similar issue。您是否有任何手动运行或通过 cron 运行的工匠命令?如果是这样,修复它以使它们以您的网络用户身份运行可能会有所帮助。

    如果不是,我真的认为这组中最适合您的解决方案是this one

    sudo setfacl -R -m u:www-data:7 /full/path/to/storage
    

    如果命令不起作用,我会找到一种可能的替代形式:

    setfacl -d -m g:www-data:rw /full/path/to/laravel/storage/logs
    

    setfacl 没有应有的流行,它确实是为网络服务器设置权限的最佳方法之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2013-06-05
      • 2019-05-02
      • 2018-06-27
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多