24

我正在玩一个有效的 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 无济于事。

4

8 回答 8

30

花了一整天的时间来解决这个问题,这个命令简单地解决了我的问题。

如果你对 Laravel App 文件夹的权限是 777 并且你仍然得到这个错误,那是因为SEliux已经阻止了它。您可以使用以下命令轻松取消阻止应用程序的文件夹:

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

而已!

顺便说一句,从不禁用 SElinux:http ://stopdisablingselinux.com/

于 2014-12-09T11:17:12.830 回答
23

正如我在评论中所说:

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

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

这会将所有目录和文件 chmodapp/storage到 777。

于 2013-07-31T13:18:59.463 回答
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 {} \;
于 2013-07-31T04:46:20.080 回答
8

当 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 {} \;

laravel 5+ 的 2016 年更新

在默认的 Laravel 5+ 应用程序结构storage中,与app. 所以前面的命令变成了:

cd storage/
mkdir meta logs cache sessions views
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;

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

于 2014-08-16T02:14:27.400 回答
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"
    
于 2015-04-09T20:13:48.293 回答
6

只需在终端上输入:

php artisan cache:clear
于 2015-11-10T11:17:53.467 回答
5

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

Laravel 4:无法打开流:权限被拒绝

于 2014-03-05T20:58:30.420 回答
0

一个一个地尝试这些命令:

setenforce 0
setsebool -P httpd_can_network_connect_db on
于 2016-11-14T10:31:02.640 回答