上传$ _FILES时出现循环错误

时间:2015-10-01 17:12:28

标签: php arrays file while-loop

我希望在成功满足所有条件后将多个文件上传到文件夹。我允许用户选择他们要上传的文件数量,但是我从脚本中收到此错误:

Notice: Undefined offset: 1 in C:\xampp\htdocs\FreeCheese\news_parse.php on line 54

注意:

以下数字' Undefined offset:',在这种情况下设置为' 1'。当我选择在页面中插入更多文件字段时,这个数字就变成了PHP正在读取的当前文件字段的数量。

EG:我有三个文件字段,错误将变为:

Notice: Undefined offset: 3 in C:\xampp\htdocs\FreeCheese\news_parse.php on line 54

如果我执行选择要上传的三个文件,所有这些文件都正确地插入到文件夹中,所以我不知道为什么在它正常运行时给出错误。

如果有人可以帮我修复此错误,那么我们将非常感激。

提前致谢,Rich

这是我的代码:

// Set the array object to 0 when entering the loop.
$i = 0;
while ($_FILES['upload1']['tmp_name'][$i]) {
$imgName1 = preg_replace("#[^a-z0-9.]#i", "", $_FILES['upload1']['name'][$i]);

// Applies a unique number before the file name to prevent files from overwriting.
$imgName1 = mt_rand(100000, 999999).$imgName1;

// Moves the image into the images/ folder
move_uploaded_file($imgTmp1[$i], "images/$imgName1");

// Sets the next array object in the loop to 1 etc etc
   $i ++;
}

1 个答案:

答案 0 :(得分:2)

如果有5个文件,则$_FILES['upload1']['tmp_name'][5]将不存在,因此while条件崩溃(它不会返回false!)... 你必须检查count($_FILES['upload1']['tmp_name'])

$nbFiles = count($_FILES['upload1']['tmp_name']);
while ($i < $nbFiles) {
    [...your code...]
    $i++;
}

您还应该使用for循环,因为它是根据您的需要制作的:

$nbFiles = count($_FILES['upload1']['tmp_name']);
for ($i=0; $i < $nbFiles; $i++) {
    [...your code...]
}