【发布时间】:2019-09-13 23:47:05
【问题描述】:
我正在编写一个类似博客的网站,该网站具有正确发布和显示帖子等功能。目前,我正在尝试添加一个选项,通过使用 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 用户更改为我的用户的情况下解决此问题?
【问题讨论】:
-
在大多数系统上,Apache 用户通常称为
www-data,而不是_www。不过,不知道这是否适用于 Mac。 -
@MagnusEriksson 是的,我检查了 Apache 配置文件,上面写着
_www。 -
您检查了哪个 Apache 配置文件?也许看看
ps aux的输出来确认?我从未使用过它,但我的理解是 MAMP 以当前用户身份运行。您不使用系统内置版本(以_www运行)的任何原因? -
@miken32 好的,所以我做了几个小时的故障排除,发现我犯了一个基本错误。我在我的 macOS 上检查了 Apache 的配置文件,但没有检查 Apache MAMP 使用的配置文件。所以我设置的所有权限都是针对我什至没有使用的用户...
标签: php apache file-upload permissions mamp