检查是否至少有一个文件上传了php

时间:2011-04-09 20:21:42

标签: php forms

我有一个表单上传多个文件:

 <?php
    $num_uploads = 3;
    $num = 0;
    while($num < $num_uploads)
    {
        echo '<div><input name="userfile[]" type="file" /></div>';
        $num++;
    }
 ?>

如何检查是否至少有一个文件是使用PHP或JavaScript提交的?

3 个答案:

答案 0 :(得分:0)

<?php
if (count($_FILES)) {
    // at least 1 file
}
?>

答案 1 :(得分:0)

试试这个,

$i = 0;
foreach ($_FILES as $file){
    if($file['size'] > 0){
         $i++;
    }        
}

现在,如果$i > 0至少上传了一个文件。 $i是上传文件的总数。

答案 2 :(得分:0)

鉴于你是如何构建表单的,你将不得不考虑PHP构建文件数组的方式。

foreach($_FILES['userfile']['error'] as $key => $err) {
    if ($err === UPLOAD_ERR_OK) {
       ... got at least one file ...
    }
}

出于某些愚蠢的原因,PHP不选择将每个文件的上传数据存储在$_FILES内的自己的单独子数组中,而是选择在常规类别中传播每个单独的错误/名称/ tmp_name / etc ...像这样:

$_FILES = array(
   'userfile' => array(
       'name' => array(
            0 => 'name of file #1'
            1 => "name of file #2'
            etc...
       ),
       'tmp_name' => array(
            0 => 'temp name of file #1'
            1 => 'temp name of file #2'
    etc.. etc... etc..
    )
);

一个更合理,更容易理解的版本将是

$_FILES = array(
      'userfile' => array(
           0 => array(
              'name' => 'name of file #1'
              'tmp_name' => 'temp name of file #1'
              ...
           ),
           1 => array(
              'name' => 'name of file #2'
              'tmp_name' => 'temp name of file #2'
              ...
但是,唉,PHP再一次让世界背负着过于复杂和笨重的愚蠢行为。