Laravel 5.2 无法打开 laravel.log
Laravel 5.2 could not open laravel.log
我知道有很多关于这个主题的问题,但我的问题真的很奇怪,这就是我决定 post 的原因。
我在 /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/
,这是截图:
如何消除错误?
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 服务器需要对 storage
和 bootstrap/cache
目录的写入权限。
1。检查网络服务器进程正在使用哪个用户
首先,请确保您的网络服务器进程由权限有限的帐户 运行 执行。 Nginx 和 Apache 通常会自动创建和使用权限较低的 www-data
用户和组。您始终可以使用 ps
命令来检查 运行ning 服务正在使用哪个用户:
ps aux | grep nginx
2。设置项目目录的所有者
接下来,确保您的 Laravel 项目目录属于与 运行 Web 服务器进程相同的用户和组。假设您的 Web 服务器是 运行 by www-data
,您的项目目录位于 /var/www/laravel
,您可以像这样设置所有权:
sudo chown -R www-data:www-data /var/www/laravel
3。授予对 storage
和 cache
目录
的写入权限
这是重要的一步,确保您授予 storage
和 bootstrap/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
希望对您有所帮助。
我终于找到了解决办法。看来问题与 PSR-4 和自动导入有关 类
下面是针对遇到此问题的其他人的解决方案:
php artisan clear-compiled
composer dump-autoload
php artisan optimize
php artisan cache:clear
你应该试试这样的东西-
php artisan cache:clear
php artisan clear-compiled
sudo chmod -R 777 storage/ -R
composer dump-autoload
你可以去this question了解更多详情。
我在 Centos7 上遇到了同样的问题……我什么都试过了。最后,我在 Whosebug 上发现了一个 post 提示它可能是 selinux。我禁用了 selinux,它起作用了!
如果您使用的是 Centos,请禁用 SELinux 实施
运行 下面的命令来执行此操作。
setenforce 0
就我而言,这个解决方案非常有效。希望这会有所帮助。
使用这个
chcon -R -t httpd_sys_rw_content_t 存储
我知道有很多关于这个主题的问题,但我的问题真的很奇怪,这就是我决定 post 的原因。
我在 /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/
,这是截图:
如何消除错误?
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 服务器需要对 storage
和 bootstrap/cache
目录的写入权限。
1。检查网络服务器进程正在使用哪个用户
首先,请确保您的网络服务器进程由权限有限的帐户 运行 执行。 Nginx 和 Apache 通常会自动创建和使用权限较低的 www-data
用户和组。您始终可以使用 ps
命令来检查 运行ning 服务正在使用哪个用户:
ps aux | grep nginx
2。设置项目目录的所有者
接下来,确保您的 Laravel 项目目录属于与 运行 Web 服务器进程相同的用户和组。假设您的 Web 服务器是 运行 by www-data
,您的项目目录位于 /var/www/laravel
,您可以像这样设置所有权:
sudo chown -R www-data:www-data /var/www/laravel
3。授予对 storage
和 cache
目录
的写入权限
这是重要的一步,确保您授予 storage
和 bootstrap/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
希望对您有所帮助。
我终于找到了解决办法。看来问题与 PSR-4 和自动导入有关 类
下面是针对遇到此问题的其他人的解决方案:
php artisan clear-compiled
composer dump-autoload
php artisan optimize
php artisan cache:clear
你应该试试这样的东西-
php artisan cache:clear
php artisan clear-compiled
sudo chmod -R 777 storage/ -R
composer dump-autoload
你可以去this question了解更多详情。
我在 Centos7 上遇到了同样的问题……我什么都试过了。最后,我在 Whosebug 上发现了一个 post 提示它可能是 selinux。我禁用了 selinux,它起作用了!
如果您使用的是 Centos,请禁用 SELinux 实施
运行 下面的命令来执行此操作。
setenforce 0
就我而言,这个解决方案非常有效。希望这会有所帮助。
使用这个
chcon -R -t httpd_sys_rw_content_t 存储