提问者:小点点

file_put_contents(META/services.json):无法打开流:拒绝权限


我是新来拉拉维尔的。我试图打开http://localhost/test/public/,我得到了

异常处理程序出错。

我搜索了一下,并使用chmod-r777 app/storage更改了存储目录的权限,但没有效果。

我更改了app.php中的debug=>true,并访问了该页面,在异常处理程序中获得了错误:

无法打开流或文件“/var/www/html/test/app/storage/logs/laravel.log”:打开流失败:拒绝/var/www/html/test/bootstrap/compiled.php中的权限:8423

然后,我使用命令chmod-r644 app/storage更改了存储目录的权限,“异常处理程序中的错误”错误消失了,并加载了一个页面。但在那里我得到了这个:

file_put_contents(/var/www/html/laravel/app/storage/meta/services.json):无法打开流:权限被拒绝


共3个答案

匿名用户

vsmoraes的建议对我有用:

Laravel>=5.4

php artisan cache:clear 
chmod -R 775 storage/
composer dump-autoload

Laravel<;5.4

php artisan cache:clear 
chmod -R 775 app/storage 
composer dump-autoload

注意:不要在任何远程服务器(开发或生产)上执行此操作

当我问这个问题时,这是我的本地主机上的一个问题,在一个虚拟机中运行。所以我认为建立一个777是足够安全的,然而,人们是正确的,当他们说你应该寻找一个不同的解决方案。请先尝试775

匿名用户

对于使用Laravel 5一直面临这个问题的谷歌人来说。

这是由于不同的用户试图以不同的权限写入storage/logs文件夹中的同一日志文件而引起的权限问题。

发生的情况是,您的laravel配置可能被设置为每天记录错误,因此您的Web服务器(Apache/NGINX)可能会在默认用户下创建此文件,这取决于您的环境它可能是类似于OSX上的_www或*NIX系统上的www-data之类的东西,那么当您可能运行了一些artisan命令并得到一些错误时,问题就来了,因此artisan将使用不同的用户编写此文件,因为终端上的PHP是由不同的用户实际上是您的登录用户执行的,您可以通过运行此命令来检查它:

php -i | grep USER

如果您的登录用户创建了该日志文件,您的Web服务器将无法在其中写入错误,反之亦然,因为laravel在默认情况下使用655权限写入日志文件,这只允许所有者在其中写入。

要修复这个临时问题,您必须手动将664组的权限授予该文件,以便您的登录用户和Web服务器用户都可以写入该日志文件。

为了永久避免这个问题,您可能需要在storage/logs目录中创建新文件时设置适当的权限,方法是继承目录中的权限。这个答案https://unix.stackexchange.com/a/115632可以帮助您解决这个问题。

匿名用户

不应授予777权限。这是个安全隐患。对于Ubuntu用户,在Laravel5中,我建议递归地更改目录存储的所有者:

请尝试以下操作:

sudo chown -R www-data:www-data storage

在基于Ubuntu的系统中,www-data是apache用户。