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



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

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

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

PHP 警告:move_uploaded_file(/users/MyUser/Desktop/Project/assets/php/../uploads/2.jpg):无法打开流:在/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 用户详细信息。

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

最新更新