PHP多图上传时sizeof($_FILES['imgs'])返回值偏大导致下标越界报错
问题根源分析
- 你对PHP多文件上传时的
$_FILES结构理解有误:当使用name="imgs[]"的多文件上传表单时,$_FILES['imgs']顶层固定包含name/type/tmp_name/error/size共5个键,所以你调用sizeof($_FILES['imgs'])得到的数值永远是5,根本不是上传的文件数量。 - 你循环的上限是
$max-1也就是4,当你上传的文件数量少于4个的时候,访问$_FILES["imgs"]["name"][$i]就会出现下标越界的Undefined array key警告,和你遇到的报错完全吻合。
修复方案
把获取文件数量的逻辑改成读取$_FILES['imgs']['name']的长度即可,同时优化循环判断逻辑,避免上传出错时产生额外警告,修复后的代码片段如下:
if(isset($_POST["upload"])){ //require '../utils/sql.php'; //$stmt=$mysql->prepare("INSERT INTO DEALS (USER, TITLE, DESCR, COST, IMGS, ST) VALUES ()"); var_dump($_FILES['imgs']); // 修正:取name数组的长度才是实际上传的文件数量 $fileCount = sizeof($_FILES['imgs']['name']); echo "上传文件数量:".$fileCount; for($i = 0; $i < $fileCount; $i++) { ?><br/><?php // 增加错误判断,避免文件上传失败时的额外警告 if($_FILES["imgs"]["error"][$i] === UPLOAD_ERR_OK) { echo($_FILES["imgs"]["name"][$i]." , ".$_FILES["imgs"]["type"][$i]." , ".$_FILES["imgs"]["tmp_name"][$i]." , ".$_FILES["imgs"]["error"][$i]." , ".$_FILES["imgs"]["size"][$i]); } else { echo "第".($i+1)."个文件上传失败,错误码:".$_FILES["imgs"]["error"][$i]; } } }
内容的提问来源于stack exchange,提问作者highling
相关产品推荐
相关产品推荐

