services.json无法打开流:Laravel 4中的权限被拒绝

时间:2013-07-30 18:26:51

标签: laravel laravel-4

我正在玩一个正在运行的Laravel 4安装并将所有内容移动到子文件夹中。然后我决定不这样做,我把它全部移回(全部通过命令行):

mv * /folder

然后

cd folder
mv * ../

现在,该网站引发了以下错误:

file_put_contents(/var/www/quantquote/app/storage/meta/services.json): failed to open stream: Permission denied

以下是完整错误的屏幕截图:

http://i.imgur.com/8deGG97.png

我已经尝试将/ storage文件夹的权限设置为777无效。

8 个答案:

答案 0 :(得分:29)

花了一整天来解决这个问题,这个命令解决了我的问题。

如果Laravel App文件夹的权限为777,但仍然出现此错误,那是因为SEliux已将其阻止。您可以使用以下命令轻松取消阻止应用程序的文件夹:

su -c "chcon -R -h -t httpd_sys_script_rw_t /usr/share/nginx/YOUR_LARAVEL_APP/"

就是这样!

BTW永远不会禁用SElinux:http://stopdisablingselinux.com/

答案 1 :(得分:23)

正如我在评论中所述:

find app/storage -type d -exec chmod 777 {} \;

find app/storage -type f -exec chmod 777 {} \;

这将chmod app/storage到777的所有目录和文件。

答案 2 :(得分:11)

由于问题与权限相关,请尝试重新授予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 {} \;

答案 3 :(得分:7)

当chmod 777或chmod 775失败时,检查子目录是否确实存在:

app/storage/
├── cache
├── logs
├── meta
├── sessions
└── views

如果这些文件夹不存在,您必须创建它:

cd app/storage/
mkdir meta logs cache sessions views
cd ../../
chmod -R 777 app/storage

2016年更新

在默认的Laravel 5应用程序结构中,storageapp处于同一级别。所以上一个命令变为:

cd storage/
mkdir meta logs cache sessions views
cd ../
chmod -R 777 storage

https://laravel.com/docs/5.0/structure

答案 4 :(得分:7)

如果您使用的是CentOS7,请执行以下步骤:

  1. 更改应用/存储目录所有权

    chown apache:apache app/storage
    
  2. 更改应用/存储空间

    chmod -R 775 app/storage
    
  3. 阻止SELinux阻止app / storage目录

    su -c "chcon -R -h -t httpd_sys_script_rw_t [fullpath]/app/storage"
    

答案 5 :(得分:6)

只需在终端上输入:

php artisan cache:clear

答案 6 :(得分:5)

永远不要以递归模式运行777。这是一个安全问题。 现在,删除services.json文件,并尝试:

Laravel 4: Failed to open stream: Permission denied

答案 7 :(得分:1)

逐个尝试这些命令:

setenforce 0
setsebool -P httpd_can_network_connect_db on