PHP 尽管拥有完全权限仍无法移动上传的文件?

PHP Unable To Move Uploaded Files Despite Having Full Permissions?

我正在编写一个类似博客的网站,具有正确发布和显示帖子等功能。目前,我正在尝试添加一个选项,通过使用 PHP 的 move_uploaded_file 功能将图像上传到我的项目文件夹中的文件夹,从而在帖子中包含图像。

我已经通过 chmod 授予 Apache 用户 _www 读取、写入和执行权限。我还确保它有权在通往上传文件夹本身的父目录中写入、读取和执行。

我什至尝试使用 chown 将项目文件夹的全部所有权转让给所述用户。然而,我收到一条 PHP 警告:

PHP Warning: move_uploaded_file(/Users/MyUser/Desktop/Project/assets/php/../uploads/2.jpg): failed to open stream: Permission denied in /Users/MyUser/Desktop/Project/assets/php/upload.php

PHP

$target_dir = __DIR__ . "/../uploads/";
var_dump($target_dir);
$file = basename($_FILES["file"]["name"]);
$target_file = $target_dir . $file;
$allowed_extensions = array("jpeg", "jpg", "png");
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));


if(isset($_POST["upload"])) {
  echo $target_file;

  $stmt = $pdo->prepare("INSERT INTO images (imgTitle, imgLocation) VALUES (:imgTitle, :imgLocation)");
  $stmt->execute(array(
    ":imgTitle" => basename($_FILES["file"]["name"]),
    ":imgLocation" => $target_file
  ));

  if ($imageFileType = in_array($imageFileType, $allowed_extensions)) {
    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
  }
}

HTML

<form action="" method="post" enctype="multipart/form-data">
    Select Image File to Upload:
    <p><input type="file" name="file"></p>
    <input type="submit" name="upload" value="Upload">
</form>

为什么会发生这种情况,如何在不将 _www 用户更改为我的用户的情况下解决此问题?

经过自我排查,我终于找到了错误的原因。将回答我自己的问题,作为对那些可能会像我一样犯同样错误的人的注释和未来参考。

macOS Apache 用户不是 MAMP 使用的 Apache 用户。

MAMP的Apache用户与macOS内置的用户不同,即_www。如果您是 运行 MAMP,请不要使用 _www,而是转到 /Applications/MAMP/conf/apache/httpd.conf,这是 MAMP 的 Apache 的用户详细信息所在的位置用户位于。

用户很可能是您用户的用户名,这是不可更改的。您可以更改的唯一设置是该 Apache 用户的组。我建议您使用它来构建您的 localhost,但请记住在切换到 localhost.

以外的 Web 主机时更改为新的 Apache 用户详细信息

我希望我的错误可以避免您数小时的困惑和一定程度的挫败感。祝你编码愉快!