关于php:Laravel 5.2无法打开laravel.log

Laravel 5.2 could not open laravel.log

我知道有很多关于这个话题的问题,但我的问题真的很奇怪,这就是我决定发布的原因。我在EDOCX1中有这个错误

1
2
3
4
5
6
7
8
9
10
11
12
13
  [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
Stack trace:

#0 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\\Handler\\StreamHandler->write(Array)

#1 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(289): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)

#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)

#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)

#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/,这里是一个截图:

chmoded

我怎样才能消除这个错误?


TLDR;

在终端上运行以下命令

1
2
3
4
5
6
7
8
9
10
# 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服务器进程正在使用哪个用户

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

1
ps aux | grep nginx

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

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

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

三。授予对storagecache目录的写访问权

这是一个重要的步骤,请确保对storagebootstrap/cache目录都给予了写入权限。

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

还是不工作?

如果上述步骤仍然不起作用,可以尝试在shell中运行以下命令:

1
2
3
4
5
6
7
8
# 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,这意味着任何用户都可以读写给定的目录。

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

希望这有帮助。


我和Centos7有同样的问题…我什么都试过了。最后,我在stackoverflow上发现了一个帖子,建议它可以是selinux。我禁用了SELinux,它起作用了!


如果您在CentOS,则禁用Selinux强制

运行下面的命令来执行此操作。

1
setenforce 0

在我的例子中,这个解决方案非常有效。希望这会有所帮助。


你应该试试这样的东西-

1
2
3
4
5
php artisan cache:clear
php artisan clear-compiled

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

你可以去这个问题了解更多细节。


用这个

chcon-r-t httpd_sys_rw_content_t存储


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

所以对于其他有这个问题的人来说,这里有一个解决方案:

1
2
3
4
php artisan clear-compiled
composer dump-autoload
php artisan optimize
php artisan cache:clear