我该怎么做才能防止代码中出现未定义的偏移通知?

时间:2012-12-12 07:32:29

标签: php upload undefined offset

  

注意:未定义的偏移量:第6行的3

第6行如下:

$tmpFilePath = $_FILES['file']['tmp_name'][$i];

以下是您应该需要的所有内容:

session_start();
//Loop through each file
for($i=0; $i<count($_FILES['file']); $i++) {
  //Get the temp file path
  $tmpFilePath = $_FILES['file']['tmp_name'][$i];

  //Make sure we have a filepath
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "./uploaded_files/" . $_FILES['file']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {

    echo "Upload Successful!<br />";

}
}
}

2 个答案:

答案 0 :(得分:2)

检查它是否存在:

if (isset($_FILES['file']['tmp_name'][$i]))
{
    $tmpFilePath = $_FILES['file']['tmp_name'][$i];
}

答案 1 :(得分:0)

乍一看,for()循环中的代码应为:

for($i=0; $i<count($_FILES['file']['tmp_name']); $i++)

因为$_FILES['file']中计算的项目可能与项目的计数不同 计入$_FILES['file']['tmp_name']

如果$_FILES['file']中的项目数超过$_FILES['file']['tmp_name']中计算的项目数,那么您的代码将触发错误,并显示未定义的偏移通知。

如果$_FILES['file']中的项目数量少于$_FILES['file']['tmp_name']中计算的项目数,那么您的代码将无法查看超出该初始计数的所有数据 ['tmp_name']数组中的值更高。

保持for循环的递增变量/运算符最接近您在表达式中计算的数组/子数组是最好的。

要轻松记住这一点的关键技巧是注意for循环看起来与放入变量的数组的索引/关联位置几乎相同。

for($i=0; $i<count($_FILES['file']['tmp_name']); $i++)  
$tmpFilePath   =   $_FILES['file']['tmp_name'][$i];  

看到了吗?