【问题标题】:"laravel.log" could not be opened: failed to open stream [duplicate]无法打开“laravel.log”:无法打开流[重复]
【发布时间】:2014-07-26 03:26:33
【问题描述】:

我已经在本地 OSX 机器上设置了 Laravel homestead,一切似乎都很顺利,直到我尝试打开 example.app:8000 并收到此错误:

Error in exception handler: The stream or file "/home/vagrant/Code/example/app/storage/logs/laravel.log" could not be opened: failed to open stream: Protocol error in /home/vagrant/Code/example/bootstrap/compiled.php:8671

我关注了 Laravel 文档以及 Laracast 关于建立宅基地的信息,所以我不确定是什么原因造成的。我可以看到/home/vagrant/Code/example/app/storage/logs/laravel.log 不存在,但我认为这是应该自动创建的?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    app/storage 下的所有文件和文件夹都应该由您和组 www-data(网络服务器)可写

    异常处理程序中的错误:无法打开流或文件“laravel/app/storage/logs/laravel.log”:无法打开流:laravel/vendor/monolog/monolog/src/Monolog/ 中的权限被拒绝处理程序/StreamHandler.php:77

    如果您在访问您的站点时在浏览器中收到此错误(或类似错误),则说明www-data 组无法写入app/storage。如果您在执行某些php artisan 命令时收到此错误,则您(用户)无法写入app/storage。因此,您和 www-data 组都必须具有写入权限。


    为确保文件和文件夹具有正确的权限:

    1. 转到 Laravel 安装的根目录(composer.jsonartisan 所在的位置)。

    2. 更改拥有用户和组,其中yourusername 是您的用户名:

      sudo chown -R yourusername:www-data app/storage
      

      这递归地 (-R) 将用户:组所有者设置为 yourusername:www-data 在从 app/storage 开始的所有文件和文件夹中。

    3. 为您和www-data 组添加写入权限:

      sudo chmod -R ug+w app/storage
      

      这递归地 (-R) 将写入标志 (w) 添加到拥有 app/storage 之后的文件和文件夹的用户 (u) 和组 (g) .

    4. 此外,有些人建议您可能需要刷新应用程序缓存。

      php artisan cache:clear
      
    5. 最后,您可能想要重新生成 Composer 的自动加载文件。

      composer dump-autoload
      

    【讨论】:

    • 这是最好的选择,但是给 777 存储,它在那个特定的日期工作,但是当其他天产生新的错误时,日志是由 www-data 创建的,所以权限错误又是抛出。但是@Virtlink,在生产服务器上授予对 www-data 的写权限是否安全?我们的代码会安全吗??
    • 喜欢这个解释。这是teach a man to fish ... 的解释,而不是give a man a fish
    • 在尝试更改拥有的用户/组时,我不断收到非法组名错误
    • 这终于解决了我在 Ubuntu 16.04 + Laravel 5.2 上的问题
    • 就我而言,问题是 SELinux。 “sudo setenforce 0”解决了它。
    【解决方案2】:

    您需要执行以下操作之一:

    • sudo chmod -R 644 app/storage
    • sudo chmod -R 755 app/storage

    【讨论】:

    • sudo chmod -R 644 app/storage 处理了错误,但现在我只看到一个空白的白页。当我尝试编辑 app/routes.php 时,出现权限被拒绝错误。我是否以某种方式弄乱了整个事情的权限?
    • @ChiragShah 在没有解释的情况下提供这样的命令(尤其是涉及权限)有点不负责任,然后当他的系统崩溃时,您只需将他指向其他答案。懒惰。
    【解决方案3】:

    至于我,我已经用chmod -R 777 storage 更改了我的存储权限,并且效果很好。

    但是,设置 777 权限非常危险,不应在本地计算机以外的任何服务器上进行。

    我已在 here 上检查过此配置。

    【讨论】:

    • 人们一次又一次地告诉777 是除否和否以及再次否的所有答案。 Linux系统没有白白做这种权限配置。 777 并不意味着大奖,它只是意味着您授予任何用户对文件的所有权限。转到 marco askubuntu.com/a/20110/700927 写的这个精彩的答案,你就会明白我的意思。
    【解决方案4】:

    如果按照其他答案中所述更改文件权限不起作用并且您使用的是 CentOS 7 或 RHEL,则问题可能是一个名为 selinux 的安全程序。在注意到 user3670777 对Laravel 4: Failed to open stream: Permission denied的回答之前,我一直在努力处理各种权限和组

    希望这对其他人有所帮助。

    【讨论】:

      【解决方案5】:

      如果以上所有建议都不起作用,请禁用您的 selinux 并重试

      【讨论】:

        【解决方案6】:

        我对 laravel 很陌生。可能我无法深入解释它,但该命令解决了我的问题。

        chmod -R 777 storage/
        

        【讨论】:

        • 正如其他 cmets 所指出的,这是一个危险的解决方案。有点像拆掉你家的前门,这样邮递员就可以投递包裹了。
        猜你喜欢
        • 2019-02-10
        • 2016-06-13
        • 2018-05-06
        • 2018-10-03
        • 2020-06-16
        • 2018-07-08
        • 2014-06-18
        • 2020-10-02
        相关资源
        最近更新 更多