检查是否至少有一个文件被上传PHP

检查是否至少有一个文件被上传PHP

问题描述:

我有一个表格上传多个文件:检查是否至少有一个文件被上传PHP

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

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

鉴于您如何构建表单,您必须考虑PHP构建文件数组的方式。

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

出于某种原因鲁钝,而不是内$_FILES它自己单独的子阵列中存储的每个文件的上传数据,选择采用PHP,而不是传播每个单独的错误/名/ 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已经再次背负世界用过于复杂和愚蠢笨拙。

+0

这不是PHP,而是你。这是你命名你的输入。所以,只怪你自己 – 2011-04-10 03:27:44

+0

我不会这样命名我的输入。但是,这并没有改变这个事实,即这是一种无法获得文件细节的方式。 – 2011-04-10 13:54:50

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

你应该真的在检查'if(count($ _ FILES)> 0)'而不是。虽然你的答案是正确的(任何数字不是0都转换为真),但是在浏览代码时以及为新程序员理解时,这种隐式转换可能会造成混淆。 – Brad 2011-04-09 20:33:14

+0

@布拉德:果然如此。正确的形式也包含返回false,null等的函数,这些函数都通过通用检查一起提交。我想我倒在“如果(1 + 3> 2)...”的“如果没有其他含义,那么更短更清晰”的一面...... – Sajid 2011-04-09 21:09:43

试试这个,

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

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

+0

如果用户想要上传零字节文件?请检查'$ file ['error'] === UPLOAD_ERR_OK',如果上传正常工作,则无论文件大小如何,都将保证为真。 – 2011-04-10 02:33:29