You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AlmaLinux 9.2中move_uploaded_file函数无法正常工作求助

上传文件move_uploaded_file失败排查求助

我已经排查了权限、文件路径、文件名、函数调用等所有配置,看起来都没问题,但文件始终无法成功移动到指定的upload文件夹。

相关代码

$folderPath = __DIR__ . "/assets/img/upload/";

$gambar = $_FILES['img'];

if (!file_exists($folderPath)) mkdir($folderPath);

if (file_exists($folderPath . $gambar["name"])) {
    return $gambar["name"] . " already in folder! ";
} else {
    $sourcePath = $gambar['tmp_name']; 

    $acak           = rand(11111111, 99999999);
    $NewImageName   = str_replace(' ', '', 'gambar' . $acak  . '.' . $file_extension);

    $targetPath = $folderPath . $NewImageName; 
    $move = move_uploaded_file($sourcePath, $targetPath); 

    if (!$move) {
        $respon = [
            "status" => false,
            "msg" => "Simpan berkas Gambar gagal!",
            "name" => $NewImageName,
            "source" => $sourcePath,
            "location" => $targetPath,
            "gambar_info" => $gambar,
        ];

        print_r($respon);
        die();
    }
}

当前配置信息

  • 文件夹权限:目录权限为drwxr-xr-x(755)
  • php.ini核心上传配置:
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20

实际响应结果

move_uploaded_file执行返回false,输出的响应内容如下:

status: false
msg: "Simpan berkas Gambar gagal!"
name: 生成的新文件名(格式为gambar+随机数+.+未定义的扩展名)
source: 临时文件路径(存在有效路径)
location: 目标文件完整路径
gambar_info: 完整的$_FILES['img']数组信息

重点排查方向

  1. 检查上传错误码:在代码开头添加var_dump($_FILES['img']['error']);,确认上传过程中是否已经出现错误(比如UPLOAD_ERR_INI_SIZE表示文件超上限,UPLOAD_ERR_NO_TMP_DIR表示临时目录缺失等)
  2. 修复未定义变量:代码中$file_extension未定义,会导致生成的文件名格式异常(如gambar12345678.),这会直接导致写入失败。需要先获取文件扩展名,比如:
$file_extension = pathinfo($gambar["name"], PATHINFO_EXTENSION);
  1. 验证目录实际可写性:在mkdir之后添加var_dump(is_writable($folderPath));,确认web服务器进程是否真的拥有该目录的写入权限。755权限下,如果目录所有者不是web进程用户(如www-data),可能会无法写入
  2. 检查临时文件状态:确认$sourcePath指向的临时文件是否存在且可读,可添加var_dump(file_exists($sourcePath), is_readable($sourcePath));验证
  3. 排查SELinux限制:如果是Linux服务器,SELinux可能阻止web进程写入目录。可临时执行sudo setenforce 0关闭SELinux测试,若能正常上传则需配置SELinux上下文规则
  4. 确认mkdir的权限参数:当前mkdir未指定权限,默认会继承父目录权限,可显式添加权限参数mkdir($folderPath, 0755, true);(第三个参数支持递归创建多级目录)

内容的提问来源于stack exchange,提问作者Didie Qaedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:26:37