'无法打开流:权限被拒绝'错误 - Laravel 5.1

时间:2016-05-09 18:56:46

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

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

当我的应用想要记录时,我收到此错误:

  

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

我找到了这个解决方案:

sudo php artisan cache:clear 

sudo chmod -R 777 storage 

sudo composer dump-autoload

但问题是它只是暂时的。这个问题每天都会发生,我总是要做同样的事情。

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

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

2 个答案:

答案 0 :(得分:5)

不建议在服务器上创建一个全局可写的目录(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并将输出粘贴到此处。 (在手动更改权限之前执行此操作)

答案 1 :(得分:1)

看起来他们之前曾在这里处理similar issue。你有手动运行或通过cron运行的工匠命令吗?如果是这样,那么修复它以便它们作为您的Web用户运行可能会有所帮助。

如果没有,我认为最适合您的解决方案是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并不像它应该的那样受欢迎,它实际上是为网络服务器设置权限的最佳方式之一。

相关问题