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

PHP表单空提交图片字段报Undefined offset:1错误修复

问题现象

提交表单时空置图片上传字段,页面抛出如下提示:

Notice: Undefined offset: 1 in ......... on line 44
携带图片提交表单时运行正常,可成功向4张关联数据库表写入数据。

报错原因
  • 空值判断逻辑存在漏洞:当多文件上传字段未选择任何文件时,$_FILES['multipleFile']['name']并非空数组,而是携带一个空字符串元素的数组,原有!empty()判断会误识别为存在上传文件,直接进入后续处理流程
  • 后缀解析逻辑未做边界判断:对空文件名执行explode('.', 空字符串)时,返回的数组仅包含索引为0的空值元素,直接访问$fileExnt[1]就会触发Undefined offset报错
  • 后缀校验规则存在安全隐患:允许的文件后缀列表中包含空字符串,可被恶意利用上传非法文件
修复代码

替换原有图片上传入库逻辑段为以下代码即可:

// 校验上传字段合法性
if (isset($_FILES['multipleFile']) && is_array($_FILES['multipleFile']['name'])) {
    $allowImg = ['png', 'jpeg', 'jpg'];
    foreach ($_FILES['multipleFile']['name'] as $index => $fileName) {
        // 跳过未选择文件的空项
        if ($_FILES['multipleFile']['error'][$index] === UPLOAD_ERR_NO_FILE) {
            continue;
        }
        // 跳过存在上传错误的项
        if ($_FILES['multipleFile']['error'][$index] !== UPLOAD_ERR_OK) {
            continue;
        }
        // 跳过大小异常的文件
        if ($_FILES['multipleFile']['size'][$index] <= 0) {
            continue;
        }
        // 安全获取文件后缀,避免无后缀文件名触发报错
        $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
        if (!in_array($fileExt, $allowImg)) {
            continue;
        }
        $fileTmp = $_FILES['multipleFile']['tmp_name'][$index];
        $newFile = rand() . '.' . $fileExt;
        $targetPath = 'upload/' . $newFile;
        if (move_uploaded_file($fileTmp, $targetPath)) {
            // 写入gallery表
            $gallery = $conn->prepare("INSERT INTO gallery (gpranet_id,image,caption) VALUES (:parent_id,:image,:caption)");
            $gallery->execute([
                ':parent_id' => $lastenterid,
                ':image' => $newFile,
                ':caption' => $newFile,
            ]);
        }
    }
}
实现效果
  • 用户不上传图片提交表单时,逻辑会自动跳过所有空上传项,不执行文件上传和gallery表写入操作,表单正常提交无报错
  • 用户携带图片提交时,原有上传、多表写入逻辑不受影响
  • 修复了原后缀校验存在的空后缀绕过风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21