【问题标题】:tmp files in laravel 8 public folderlaravel 8 公共文件夹中的 tmp 文件
【发布时间】:2021-04-21 12:52:18
【问题描述】:

当我将文件上传(实际移动)到 laravel 8 中的公用文件夹时,它们被存储为 .tmp 文件,当我尝试将文件存储在 storage 文件夹中时,它说无法打开流:权限被拒绝。我应该启用某种写权限吗?还是我在代码中遗漏了什么?

     if($request->file('file')) {

         $uniqueFileName = uniqid() . $request->file('file')->getClientOriginalName();

         $post = new Post();
         $post->name = request('name');
         $post->email = request('email');
         $post->doc = $uniqueFileName;
         
         $request->file('file')->move(public_path('uploads/files',$uniqueFileName));
         
         //I also tried to store files here, but says "failed to open stream: permission denied"
         //$request->file('file')->store('uploads');

         $post->save();

         return redirect()->back();

         }

【问题讨论】:

  • 将公用文件夹更改为 777
  • 为什么要将文件存储在公共目录中?推荐的方法是将文件存储在存储目录中,然后公开符号链接(docs. here laravel.com/docs/8.x/structure#the-storage-directory)。 777 权限转到“存储”文件夹,而不是“公共”

标签: php laravel


【解决方案1】:

您需要使用以下命令更改权限:chmod -R 777 storage

【讨论】:

  • 我用的是windows,请问用windows CMD的正确命令是什么?
  • 您能否在您的文件夹上执行此操作:选择属性 > 安全选项卡 > 高级按钮 > 权限选项卡 > 继续按钮。
  • 嗨,请问接下来要做什么?
  • 如果您已经按照上述步骤操作,您应该能够更改经过身份验证的用户的权限。
  • 假设如果这是一个很长的路要使用这个解决方案: $path = public_path("restaurants/".$name); if(!File::isDirectory($path)) { \File::makeDirectory($path, 0777, true, true); }
【解决方案2】:

在终端sudo chmod -R 777public 上尝试它会改变目录权限

【讨论】:

  • 我用的是windows,请问用windows CMD的正确命令是什么?
【解决方案3】:

用类似的方法遇到了同样的问题。

通过手动更改php.ini修复它
更改条目upload_max_filesize = 2000M

!不要尝试使用 ini_set() 在脚本中更改它,它不适用于此条目。为什么? -> 检查可更改的https://www.php.net/manual/en/ini.list.php
mby php在上传后检查file_size,如果超过设置的值则拒绝权限?不知道。但对我有用...

有些人也可能会遇到:

PHP Warning:  POST Content-Length of XXX bytes exceeds the limit of XXX bytes in Unknown on line 0

通过手动更改php.ini修复它
更改条目post_max_size = 2000M

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2020-01-27
    • 2016-01-24
    • 2016-03-31
    • 2021-11-02
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多