Laravel 5.2 无法打开 laravel.log

Posted

技术标签:

【中文标题】Laravel 5.2 无法打开 laravel.log【英文标题】:Laravel 5.2 could not open laravel.log 【发布时间】:2016-06-13 10:15:48 【问题描述】:

我知道关于这个主题有很多问题,但我的问题真的很奇怪,这就是我决定发帖的原因。 我在/var/logs/apache/error.log 中有这个错误

  [Tue Mar 01 07:26:51.435312 2016] [:error] [pid 8837] [client 127.0.0.1:37843] php Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/personale/librarie-cor/storage/logs/laravel.log" could not be opened: 
failed to open stream: Permission denied' in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:87\nStack trace:
\n#0 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\\Handler\\StreamHandler->write(Array)
\n#1 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(289): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
\n#2 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(565): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#3 /var/www/personale/librarie-cor/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#4 /var/www/personale/librarie-cor in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 87

事情是我已经做了chmod -R 777 storage/,这是截图:

我怎样才能摆脱这个错误?

【问题讨论】:

更新作曲家一次。 已经试过了..没有运气.. man 删除 laravel.log 文件。然后 Laravel 会生成一个新的 试过了..那也没用...我发布了一个解决方案 为什么数据库文件夹设置为777? 【参考方案1】:

TLDR;

在终端上运行以下命令

# Clear Laravel cache and the compiled classes
php artisan cache:clear
php artisan clear-compiled

# Change the storage and cache directories permission
sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap/cache

# Regenerate the composer autoload file
composer dump-autoload

更详尽的解释

这通常是因为 Web 服务器需要对 storagebootstrap/cache 目录的写访问权限。

1。检查 Web 服务器进程正在使用哪个用户

首先,确保您的网络服务器进程由具有有限权限的帐户运行。 nginx 和 Apache 通常会自动创建和使用权限较低的 www-data 用户和组。您可以随时使用ps 命令来检查正在运行的服务正在使用哪个用户:

ps aux | grep nginx

2。设置项目目录的所有者

接下来,确保您的 Laravel 项目目录属于运行 Web 服务器进程的同一用户和组。假设您的 Web 服务器由 www-data 运行,并且您的项目目录位于 /var/www/laravel,您可以像这样设置所有权:

sudo chown -R www-data:www-data /var/www/laravel

3。授予对storagecache 目录的写入权限

这是重要的步骤,请确保您将写入权限同时授予 storagebootstrap/cache 目录。

sudo chmod -R 775 /var/www/laravel/storage
sudo chmod -R 775 /var/www/laravel/bootstrap/cache

还是不行?

如果以上步骤还是不行,可以尝试在shell中运行以下命令:

# 1. Clear Laravel cache
php artisan cache:clear

# 2. Delete the compiled class
php artisan clear-compiled

# 3. Regenerate the composer autoload file
composer dump-autoload

但是还是不行?

对于最后一个资源,尝试将权限设置为777,这意味着任何用户都可以读取和写入给定目录。

sudo chmod -R 777 /var/www/laravel/storage
sudo chmod -R 777 /var/www/laravel/bootstrap/cache

希望对您有所帮助。

【讨论】:

我已经更新了我的答案。我刚刚意识到您使用的是 Laravel 5.2 版本。 我遇到了这个问题,因为我在生产中运行了 composer update。 sudo chmod -R 777 storage 对我有用,但我不知道为什么。谁能解释一下? @Dazzle 那是因为 Web 服务器/Laravel 需要对这两个目录的写入权限(用于写入日志和缓存)。不一定总是777,它取决于这两个目录的所有者/组。你会在这里找到一个简短的解释:Laravel Configuration 谢谢,@NineCattoRules!刚刚添加了一些关于安全问题的信息。【参考方案2】:

我在使用 Centos7 时遇到了同样的问题……我尝试了所有方法。最后,我在***上发现了一个帖子,暗示它可能是selinux。我禁用了 selinux,它起作用了!

【讨论】:

是的,但不知道为什么。 找到更多描述 SElinux 问题的链接:***.com/questions/30306315/…【参考方案3】:

如果您在 Centos 中,请禁用 SELinux 强制执行

运行下面的命令来做到这一点。

setenforce 0

就我而言,这个解决方案效果很好。希望这会有所帮助。

【讨论】:

那么安全风险呢? 看看laracasts.com/discuss/channels/laravel/… 上述问题的最佳解决方案` chcon -R -t httpd_sys_rw_content_t storage `【参考方案4】:

你应该尝试这样的事情-

php artisan cache:clear
php artisan clear-compiled

sudo chmod -R 777 storage/ -R
composer dump-autoload

你可以去this question了解更多详情。

【讨论】:

已经尝试过.. 不工作.. 检查我找到的解决方案的答案【参考方案5】:

我终于找到了解决方案。似乎问题与 PSR-4 和自动导入类有关

因此,对于遇到此问题的其他人来说,这是解决方案:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
php artisan cache:clear

【讨论】:

【参考方案6】:

使用这个

chcon -R -t httpd_sys_rw_content_t 存储

【讨论】:

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

无法在 laravel 5.2 中查询 json 数据

如何使用 laravel 5.2 在线打开 PDF?

CORS问题无法解析jquery,laravel 5.2

致命错误:未知:Laravel 5.2 Auth 中需要打开失败错误

Laravel 5.2:无法找到具有名称的工厂 [默认]

Laravel 5.2 无法将跨域 jQuery 方法识别为 AJAX