0

我有以下代码:

 if (!is_uploaded_file($_FILES['sb_file']['tmp_name']))
                           {
                               echo "Error in Uploading File <br>".$_FILES["sb_file"]["error"][$count];
                           }

is_uploaded_file返回 false ,甚至 $_FILES['sb_file']['errors'] 返回 0 但文件没有在目标文件夹中移动。如何跟踪错误?

foreach ($_FILES['sb_file']['name'] as $filename)
        {
            //make sure no empty thing goes
            if($filename!=""&&$filename!=null)
            {
                $temp = explode(".", $filename);
                $extension = end($temp);
                $upload_folder = "/home/content/w/k/1/wk1989/html/".trim($config["UPLOAD_FOLDER"]);
                 if(!(in_array($extension, $allowedExts)))
                    print "$filename has Invalid file Type <br />";
                 else
                 {
                     $uploaded_file_name = $filename."-".date("YmdHis").".".$extension;
                     if ($_FILES["sb_file"]["error"][$count] > 0)
                        {
                            echo "<br />Error: " . $_FILES["sb_file"]["error"][$count] . "<br />";
                        }
                        else
                        {
                            $target_path = "uploads/";
                            $target_path = $target_path.basename( $file_upload['name']); 
                            print "Path = $target_path <br>";
//                            if(move_uploaded_file($file_upload['tmp_name'], $target_path)) {
//                            //    echo "The file ".  basename( $file_upload['name']). " has been uploaded";
//                            } else{
//                                //echo "There was an error uploading the file, please try again!";
//                            }
                           move_uploaded_file($_FILES["sb_file"]["tmp_name"][$count],$upload_folder.$uploaded_file_name);
//                           if (!is_uploaded_file($_FILES['sb_file']['tmp_name'][$count]))
//                           {
//                               echo "Error in Uploading File <br>".$_FILES["sb_file"]["error"][$count];
//                           }
//                           else
//                           {
//                               
//                           }
                           $is_upload = true;
                           echo "Uploaded = ".$upload_folder.$uploaded_file_name;

                        }
                        if($is_upload)
                        {
                            $uploaded_files[] = $upload_folder.$uploaded_file_name;
                        }
                 } 
            }
             $count++;
        }
4

1 回答 1

1

首先,我建议您使用move_uploaded_file而不是手动移动文件。要调试您当前的代码,您应该执行print_r($_FILES)并检查路径是否正确以及有关文件的哪些信息已传递给您的脚本。

我发现一个帖子说该函数is_uploaded_file处理文件名区分大小写(即使在 Windows 上)(阅读原始帖子)。

我认为处理上传文件的最佳方法是这样的:

$upload_dir = "D:/user_uploads/";
foreach($_FILES as $key => $file_arr)
{
  switch($file_arr["error"])
  {
    case UPLOAD_ERR_OK:
    {
      if($file_arr["size"]>0)
      { 
        $result = move_uploaded_file($file_arr["tmp_name"], $upload_dir.$file_arr["name"]);
        if($result === true) echo "Upload ok";
        else                 echo "Upload failed";
      }
      else echo "The file has no content";
    }
    default: 
    {
      echo "Upload Error #".$file_arr["error"]." for field" . $key;
      print_r($files_arr); // only for debuging, remove this on live systems
    }
  }
}

如果需要,您可以添加更多案例块,例如 UPLOAD_ERR_FORM_SIZE。在Unix / linux或 ntfs 驱动器上,您应该检查 upload_dir 是否is_writeable()

于 2013-10-07T07:59:08.403 回答