【问题标题】:move_uploaded_file Failed to open stream: Permission denied in XAMPP MacOSmove_uploaded_file 无法打开流:XAMPP MacOS 中的权限被拒绝
【发布时间】:2022-01-04 17:48:18
【问题描述】:

我试图在 MacOS 上使用 XAMPP 将使用 php 的文件上传到我的本地。每当我尝试通过脚本上传文件时,都会出现此错误。

move_uploaded_file  - Failed to open stream: Permission denied  

所以我尝试了一些我在互联网上看到的修复,比如 chmod -R 777 ,更改用户组,并尝试为每个用户授予读写权限; 他们都没有工作。

这是我用于上传的代码:

    if(!empty($filename)){
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        $new_filename = $slug.'_'.time().'.'.$ext;
        if(!move_uploaded_file($_FILES['eventImage']['tmp_name'], '../assets/images/events/'.$new_filename))
        {
            $_SESSION['error']='<strong>Error!</strong> Uploading Image failed. Please try again.';
        }   
    }
    else{
        $new_filename = '';
    }

我想知道如何解决这个错误。我认为这是 MacOS 的一些安全问题。

【问题讨论】:

  • 首先向我们展示代码,特别提到 DocumentRoot 目录在哪里以及您尝试放置上传文件的位置以及 DocumentRoot 与其他目录之间的关系
  • @RiggsFolly 好的,当然。我在 htdocs 中的任何文件夹中都收到此错误。实际上是 XAMPP 安装在 Applications 文件夹中,这是一个原因吗?
  • '../assets/images/events/'.$new_filename 这是否将您带到 DocumentRoot 之上?

标签: php file-upload permissions permission-denied move-uploaded-file


【解决方案1】:

就像在 nix 下,你可以尝试(测试中 - 非生产服务器): chmod -R 755 ./.* chmod +x ./.

其中 ./ 是您的 HTML 文件的文档根目录(不要将其用作 root/admin !!!) 参数 -R 代表“递归操作”-因此它将尝试包含 ./

下的所有子目录

和: chown -R www-data:www-data ./.

在您的文档根目录。

www-data 组,Apache2.4 需要用户 - 参见手册中的设置。

组和用户 www-data 在像操作系统这样的 *nix 下很重要。 在 Windows 下,您必须以管理员权限启动 XAMPP。 所以要注意!!!

并且:你永远不应该使用 XAMPP 来生产!!!

【讨论】:

  • 我尝试使用 chmod,它显示 Operation not allowed。 chown 实际上将该文件夹的所有权授予另一个用户,例如 XAMPP 的守护进程。所以我将无法更新文件。
  • 在Linux下(我不知道你有什么发行版)像Debian,有一个命令,可以让你拥有管理员权限 - 它被称为“sudo”(你需要管理员组的特权密码) .所以你可以试试“# sudo chmod -R 750 ./yourdocumentroot”
猜你喜欢
  • 2015-11-02
  • 2023-03-18
  • 2013-06-19
  • 2014-01-02
  • 2021-05-21
  • 2011-12-27
相关资源
最近更新 更多