services.json无法打开流:Laravel 4中的权限被拒绝
我在玩一个正在运行的Laravel4安装,并将所有内容都移动到一个子文件夹中。然后,我决定不这样做,我将其全部向后移动(全部通过命令行): 然后services.json无法打开流:Laravel 4中的权限被拒绝,laravel,laravel-4,Laravel,Laravel 4,我在玩一个正在运行的Laravel4安装,并将所有内容都移动到一个子文件夹中。然后,我决定不这样做,我将其全部向后移动(全部通过命令行): 然后 cd folder mv * ../ 现在,站点抛出以下错误: file_put_contents(/var/www/quantquote/app/storage/meta/services.json): failed to open stream: Permission denied 以下是完整错误的屏幕截图: 我已尝试将/storage文件夹
cd folder
mv * ../
现在,站点抛出以下错误:
file_put_contents(/var/www/quantquote/app/storage/meta/services.json): failed to open stream: Permission denied
以下是完整错误的屏幕截图:
我已尝试将/storage文件夹的权限设置为777,但没有效果。由于问题与权限有关,请尝试重新授予app/storage及其所有子目录和文件的正确权限 您可以从Laravel应用程序的根路径键入:
chmod -Rvc 777 app/storage
如果出于某种原因,这不起作用,请尝试:
find app/storage -type d -exec chmod -vc 777 {} \;
find app/storage -type f -exec chmod -vc 777 {} \;
正如我在评论中所说:
find app/storage-type d-exec chmod 777{}代码>
find app/storage-type f-exec chmod 777{}代码>
这将把app/storage
中的所有目录和文件chmod到777 切勿在递归模式下运行777。这是一个安全问题。
现在,请删除services.json文件,然后尝试以下操作:
当chmod 777或chmod 775失败时,请检查子目录是否确实存在:
app/storage/
├── cache
├── logs
├── meta
├── sessions
└── views
如果这些文件夹不存在,您必须创建它:
cd app/storage/
mkdir meta logs cache sessions views
cd ../
find storage -type d -exec chmod 775 {} \;
find storage -type f -exec chmod 664 {} \;
2016年更新laravel 5+
在默认的Laravel 5+应用程序结构中,存储
与应用程序
处于同一级别。因此,前面的命令变为:
cd storage/
mkdir meta logs cache sessions views
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;
花了一整天的时间来解决这个问题,这个命令简单地解决了我的问题
如果您对Laravel应用程序文件夹的权限为777,但仍然出现此错误,则是因为您已阻止此错误。您可以使用以下命令轻松取消阻止应用程序的文件夹:
su-c“chcon-R-h-t httpd\u sys\u script\u rw\u t/usr/share/nginx/YOUR\u LARAVEL\u APP/”
就这样
顺便说一句,永远不要禁用SElinux:如果您使用的是CentOS7,请执行以下步骤:
更改应用程序/存储目录所有权
chown apache:apache app/storage
更改应用程序/存储权限
chmod -R 775 app/storage
防止SELinux阻止应用程序/存储目录
su -c "chcon -R -h -t httpd_sys_script_rw_t [fullpath]/app/storage"
只需在终端上键入以下内容:
php artisan cache:clear
逐个尝试以下命令:
setenforce 0
setsebool -P httpd_can_network_connect_db on
chmod-R 0777 app/storage
应该很好……再次尝试,但没有效果:(尝试运行find app/storage-type d-exec chmod 777{};
和find app/storage-type f-exec chmod 777{}\;
@CollinHenderson就是这么做的,谢谢。你能解释一下这是怎么回事吗?这些命令将app/storage
下所有目录和文件的权限更改为777
。请从链接中发布相关部分,如果链接死了,那么将来的答案将不会有帮助。我会将权限设置为775读取777,并相应地配置文件所有权和组。即,web服务器的组和应用程序/存储文件夹将是相同的。作为安全预防措施,我建议chmod-R ug+rwX,o-rwX。
这将只设置要执行的目录,并防止组外的人对您的文件做可怕的事情。阅读如何以正确的方式设置目录权限检查以下答案:非常感谢!我想补充一点,我的命令最后是chcon-R-h-t httpd\u sys\u script\u rw\u t/var/www/laravel
,因为我已经在本地机器上以root用户身份运行,以防其他人睡眠不足,无法正确读取内容。同样,thanks!这是用Laravel和logging解决这么多问题的答案。谢谢。节省了一天的调试时间。请,如果您要否决此答案,请提供任何解释,以便我们可以改进它。谢谢。否决:永远不要使用chmod 777!建议这样一个危险的命令作为解决方案,应该禁止使用。@exeаЙ你会推荐吗?这个答案帮助了我,我需要在存储文件夹下创建文件夹结构。但在我的情况下(对于Laravel 5.0),视图、会话和缓存文件夹必须位于名为“framework”的子文件夹中.救了我的命。--为什么没有投票支持这个?这就像一个符咒!谢谢!因为它禁用了SELinux,而不是学习如何使用它,这是一个危险的建议。此外,海报还没有真正解释这个“解决方案”在做什么。
setenforce 0
setsebool -P httpd_can_network_connect_db on