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

PHP上传文件未更新时沿用旧记录文件扩展名的实现方案是什么?

问题解决

现有代码问题

  • 变量拼写错误:else分支中$rnew["File"]应为$rsnew["File"],变量名写错导致赋值不生效
  • 上传判断逻辑不严谨:仅判断文件大小为0无法覆盖上传出错、文件字段未提交的场景,容易出现异常
  • 缺少空值兼容:如果是首次新增记录没有旧文件数据时,$ext2会为空,没有做兜底处理

修正后代码

// 初始化默认扩展名为空
$ext = '';
// 判断是否有正常上传的新文件
if (isset($_FILES["File"]) && $_FILES["File"]["error"] == UPLOAD_ERR_OK) {
    // 取新上传文件的扩展名
    $ext = pathinfo($rsnew["File"], PATHINFO_EXTENSION);
} else {
    // 没有新文件上传,优先取旧记录的扩展名
    if (!empty($rsold["File"])) {
        $ext = pathinfo($rsold["File"], PATHINFO_EXTENSION);
    }
    // 可选:如果是新增场景没有旧文件,可以在这里加兜底逻辑,比如设置默认扩展名或者抛出错误
    // if (empty($ext)) {
    //     throw new \Exception('请上传文件');
    // }
}

// 统一生成文件名,避免重复代码
$rsnew["File"] = "{$rname} {$docpath1} {$docpath2} {$docpath} ID{$randomNumber}.{$ext}";

// 新文件上传的场景可以在这里加你原来的return逻辑,根据业务调整
// if (isset($_FILES["File"]) && $_FILES["File"]["error"] == UPLOAD_ERR_OK) {
//     return true;
// }

逻辑说明

  • 用PHP内置的上传错误码UPLOAD_ERR_OK判断文件是否上传成功,比判断文件大小更准确,覆盖了所有正常上传的场景
  • 扩展名取值优先级:新上传文件扩展名 > 旧记录文件扩展名 > 兜底自定义逻辑
  • 文件名生成逻辑统一写一处,避免重复代码后续修改出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:02