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

PHP如何验证多文件上传时$_FILES['file']['error']数组全为0?

多文件上传添加上传错误校验的实现

要在上传代码执行前校验所有文件的上传错误码,你可以通过以下步骤实现:

校验逻辑说明

$_FILES['file']['error']是存储每个文件上传错误码的数组,错误码为0(对应常量UPLOAD_ERR_OK)表示上传无异常。我们需要确认数组中所有值都为0,才能继续执行后续的文件移动和数据库存储操作。

修改后的完整代码

下面是添加了错误校验逻辑的完整代码,标注的部分为新增内容:

if(isset($_POST['submit'])) {
    $allowed = array('jpg','jpeg','png','pdf','xlsx','docs','xls','docx','ppt');
    $file_name_checking = $_FILES['file']['name'];
    $file_size_checking = $_FILES['file']['size'];
    $file_error_checking = $_FILES['file']['error']; //this is the array to be checked

    $file_name_check_actual_ext = array();

    foreach ($file_name_checking as $extension_files) {
        $extension_actual = explode('.', $extension_files);
        $file_actual_Ext = strtolower(end($extension_actual));
        $file_name_check_actual_ext[] = $file_actual_Ext; 
    }

    $file_name_check_ext = !array_diff($file_name_check_actual_ext, $allowed);
 
    if($file_name_check_ext === true) {
        if(max($file_size_checking) < 1000000) {
            // --- 新增:上传错误校验逻辑 ---
            $has_upload_error = false;
            foreach($file_error_checking as $error_code) {
                if($error_code !== UPLOAD_ERR_OK) {
                    $has_upload_error = true;
                    break;
                }
            }

            if($has_upload_error) {
                echo "部分文件上传出现错误,请重新尝试!";
            } else {
            // --- 新增结束 ---
            
                //my upload code
                $all_upload_success = true; // 新增:标记所有文件是否上传成功
                foreach ($_FILES['file']['tmp_name'] as $key => $value) {
                    $file_name = $_FILES['file']['name'][$key];
                    $file_tmp_name = $_FILES['file']['tmp_name'][$key];
                    $file_size = $_FILES['file']['size'][$key];
                    $file_error = $_FILES['file']['error'][$key];
                    $file_type = $_FILES['file']['type'][$key];

                    $file_ext = explode('.', $file_name);
                    $file_name_original = pathinfo($file_name, PATHINFO_FILENAME);
                    $file_actual_Ext = strtolower(end($file_ext));

                    $file_name_new = uniqid('',true).".".$file_actual_Ext; 

                    $file_destination = '../uploads/'.$file_name_new;

                    $result = move_uploaded_file($file_tmp_name, $file_destination);
                    if(!$result) {
                        $all_upload_success = false;
                    }

                    $query = "INSERT INTO file_storage (
                        file_name,
                        file_size,
                        file_type,
                        file_name_unique,
                        file_ext
                        )
                        VALUES (
                            :file_name, 
                            :file_size, 
                            :file_type,
                            :file_name_unique,
                            :file_ext
                        ) 
                    ";

                    $stmt=$pdo->prepare($query);
                    $stmt->bindParam(":file_name", $file_name_original);
                    $stmt->bindParam(":file_size", $file_size);
                    $stmt->bindParam(":file_type", $file_type);
                    $stmt->bindParam(":file_name_unique", $file_name_new);
                    $stmt->bindParam(":file_ext", $file_actual_Ext);

                    $stmt->execute();

                }

                if ($all_upload_success) {
                    echo "Files uploaded successfully!";
                } else {
                    echo "部分文件上传失败,请检查!";
                }
            } // --- 新增:闭合错误校验的else分支 ---
        } else {
            echo "File Size is too large!";
        }
    
    } else {
        echo "Please check the extension of files";
    }
}

补充说明

  1. 新增的错误校验逻辑遍历$file_error_checking数组,只要发现任意一个文件的错误码不为UPLOAD_ERR_OK,就标记存在上传错误,终止后续上传操作
  2. 同时优化了原代码中$result的判断逻辑:原代码只判断最后一个文件的上传结果,改为用$all_upload_success标记所有文件是否都上传成功,结果更准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:53:13