Windows下XAMPP中move_uploaded_file权限拒绝问题求助
解决Windows XAMPP环境下PHP move_uploaded_file权限拒绝问题
核心问题:路径错误
你的报错显示目标路径为/users/6.png,在Windows系统中,以斜杠开头的路径会指向系统根目录(比如C:\users\6.png),而非你预期的C:\xampp\htdocs\users\6.png。这才是权限拒绝的根本原因——Apache/PHP进程没有系统根目录下users文件夹的写入权限,哪怕你给了htdocs下的users文件夹权限也无效。
解决方案步骤
1. 修正目标路径
把代码中的$targetDir改为指向htdocs下的users文件夹,推荐两种可靠方式:
方式一:使用网站根目录常量拼接
利用$_SERVER['DOCUMENT_ROOT']获取XAMPP网站根目录(即C:\xampp\htdocs),再拼接users文件夹路径:
// 替换原$targetDir定义 $targetDir = $_SERVER['DOCUMENT_ROOT'] . '/users/';
方式二:使用相对路径
由于你的脚本位于C:\xampp\htdocs\scripts\,可以用相对路径向上一级再指向users:
$targetDir = '../users/';
修改后,$targetFilePath会正确指向C:\xampp\htdocs\users\6.png,而非系统根目录。
2. 验证路径正确性(可选但推荐)
在调用move_uploaded_file前,先输出目标路径确认:
echo "目标路径:" . $targetFilePath; // 测试用,上线后删除
3. 确保权限配置正确
修正路径后,确认以下权限设置:
- 给
C:\xampp\htdocs\users文件夹添加Apache运行用户的读写权限:
打开文件夹属性 → 安全 → 编辑 → 添加用户(XAMPP的Apache默认运行用户通常是SYSTEM,如果你修改过配置则是你设置的hostname用户),赋予该用户读取、写入、修改权限 - 确认
C:\xampp\tmp文件夹(PHP临时上传目录)也有相同用户的读写权限
4. 修正Apache配置错误
你之前的Apache Directory配置用了Unix风格路径,Windows下需改为Windows风格:
<Directory "C:/xampp/htdocs/users"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
另外,unixd_module是Unix系统专属模块,Windows下Apache不会加载,你修改的User/Group配置无效,可直接删除这段内容。
最终修改后的代码示例
<?php session_start(); if (!isset($_SESSION['username'])) { header("Location: login"); exit(); } $user_id = isset($_POST['user_id']) ? $_POST['user_id'] : '-1'; // 使用DOCUMENT_ROOT确保路径正确 $targetDir = $_SERVER['DOCUMENT_ROOT'] . '/users/'; if (isset($_FILES["profilePicture"])) { $file = $_FILES["profilePicture"]; $fileName = $user_id . ".png"; $targetFilePath = $targetDir . $fileName; // 可选:自动创建不存在的目标目录 if (!is_dir($targetDir)) { mkdir($targetDir, 0777, true); } if (move_uploaded_file($file["tmp_name"], $targetFilePath)) { echo "La imagen de perfil se ha guardado correctamente."; } else { echo "Error al guardar la imagen de perfil."; } } else { echo "No se ha seleccionado ninguna imagen."; } ?>
内容的提问来源于stack exchange,提问作者c mou
相关产品推荐
相关产品推荐

