Laravel 5 - ErrorException 无法打开流:权限被拒绝

问题描述 投票:0回答:12

我刚刚

git clone
我的一个存储库包含 Laravel 5.1 项目。我已经完成了正常的步骤来启动并运行它(设置网络服务器、数据库等)。我现在已访问我配置的网址,但收到以下错误消息:

ErrorException in compiled.php line 6648:
file_put_contents(/3c7922efc24ab13620cd0f35b1fdaa61): failed to open stream: Permission denied

知道它试图访问哪个文件夹吗?

laravel laravel-5.1
12个回答
57
投票

我用这个解决方案解决了问题,并澄清如果您有 Windows,则应用第 1 行和第 3 行,它的工作原理是相同的。

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

27
投票

为了解决这个问题,我需要创建一些安装中缺少的文件夹。您需要 www 用户可以读取和写入以下文件夹:

/storage
/storage/cache
/storage/framework
/storage/framework/sessions
/storage/framework/views
/storage/framework/cache
/storage/logs

此外,将文件夹权限设置为

775
。从根目录运行命令:
sudo chmod -R 755 storage


8
投票

如果没有任何帮助,并且如果您使用 docker 在 Windows 上工作,则可能是符号链接错误的问题,您可以尝试:

ln -s /var/www/storage/app/public /var/www/public/storage

之后:

chown -R $USER:www-data storage

chmod -R 777 storage

在 docker bash 上。


2
投票

我在我的 localhost 中遇到了类似的问题,问题是我试图在我的

php.ini
文件中上传一个大于 upload_max_filesize 的文件。 只需将其更新为更大的值并重新启动我的服务器就可以解决问题,如果您遇到类似的问题,可能就是这种情况


1
投票

如果您使用的是 ubuntu,很可能您必须授予该文件夹存储权限

cd 进入项目并 使用命令 -> sudo chmod 755 storage/*


1
投票

如果您使用的是启用了 SELinux 的 Linux 发行版,则您需要执行以下操作:

sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/my-app/storage
sudo chown -R nginx /var/www/html/my-app/storage
sudo chmod -R u+w /var/www/html/my-app/storage

这应该为存储目录设置正确的上下文,允许 Web 服务器写入它。


0
投票

我最近在测试中遇到了这个问题,并通过以下方式解决了它:composer dump-autoload


0
投票

这就是我解决类似问题的方法,因为我无法访问终端来运行

sudo chown -R www-data:www-data /thedirectory

config/filesystem.php

 'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

然后在我的上传控制器中

use Illuminate\Support\Facades\Storage;

  $file_path= Storage::path('public/importable');
        
  if (!is_dir($file_path)) {mkdir( $file_path,0775, true);}

0
投票

如果您在尝试植入 CSV 文件时在 Laravel(9 或更高版本)上遇到此问题,并且某些文件可以工作,但有些文件会抛出此错误,我发现只需运行即可

php artisan cache: clear 

成功了


-1
投票

对我来说,这是因为单个文件由root拥有......在我设置文件时的某个时刻写入,并且应用程序无法读取它。解决方案可能是改变所有权、摆脱它等等。


-1
投票

对我来说,解决方案是更改 laravel 项目的文件夹所有者。确保是您自己的用户而不是 root:www-data。

sudo chown -R username:group directory

-2
投票

在正在触发的目录下执行以下命令检查权限:

ls -lah

如果有任何问题,您可以通过以下方式纠正:

sudo chown -R username:group directory

© www.soinside.com 2019 - 2024. All rights reserved.