错误句柄无法正常工作 - 文件上传检查

时间:2013-04-30 18:17:41

标签: php file-upload if-statement ifnull

我在页面上有一个多图像上传表单(最多3个) - 但用户可能选择不上传1个或多个图像。当一个或多个空白时,处理上传的脚本会出现此错误:

“警告:copy()[function.copy]:文件名在”....

中不能为空

如果/当字段为空时我尝试使用下面的代码忽略复制请求,但如果文件上传存在但是它不起作用则执行复制。有人可以告诉我为什么这不起作用或者更合适我需要以不同的方式编码吗?

FORM

<form id="form1" method="post" action="processor.php" enctype="multipart/form-data">

<div>
First Profile Image  <input name="ufile[]" type="file" /><br />
Second Profile Image <input name="ufile[]" type="file" /><br />
Third Profile Image  <input name="ufile[]" type="file" /><br />
<input type="submit" name="submit" id="submit" value="Submit" />

</div>

处理器.php文件中的PHP

$pfi1= "upload/".$_FILES['ufile']['name'][0];
$pfi2= "upload/".$_FILES['ufile']['name'][1];
$pfi3= "upload/".$_FILES['ufile']['name'][2];
if ($_FILES['ufile']['name'][0] !=="" || $_FILES['ufile']['name'][0] !==NULL) {copy($_FILES['ufile']['tmp_name'][0], $pfi1);}
if ($_FILES['ufile']['name'][1] !=="" || $_FILES['ufile']['name'][1] !==NULL) {copy($_FILES['ufile']['tmp_name'][1], $pfi2);}
if ($_FILES['ufile']['name'][2] !=="" || $_FILES['ufile']['name'][2] !==NULL) {copy($_FILES['ufile']['tmp_name'][2], $fi3);}

2 个答案:

答案 0 :(得分:0)

在使用文件操作功能(如copy。)之前,您需要添加文件系统级别检查。

首先使用is_file()file_exists()检查是否可以在其上运行copy()功能

    if ($_FILES['ufile']['name'][0] !=="" 
       && $_FILES['ufile']['name'][0] !==NULL
       && file_exists("full/path/to/".$_FILES['ufile']['name'][0])
   )
   {
     copy...
   }

答案 1 :(得分:0)

正如此链接中的评论所使用的那样:Multiple file upload in php感谢:Andy Braham对该主题的投入。

HTML

<input name="upload[]" type="file" multiple="multiple" />

PHP

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

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

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

      //Handle other code here

    }
  }
}