Php 检查是否至少上载了一个文件

Php 检查是否至少上载了一个文件,php,forms,Php,Forms,我有一个上传多个文件的表单: <?php $num_uploads = 3; $num = 0; while($num < $num_uploads) { echo '<div><input name="userfile[]" type="file" /></div>'; $num++; } ?> 如何检查是否至少有一个文件是用PHP或JavaScript提交的

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

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

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


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

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

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

考虑到您构建表单的方式,您必须考虑PHP构建文件数组的方式

foreach($_FILES['userfile']['error'] as $key => $err) {
    if ($err === UPLOAD_ERR_OK) {
       ... got at least one file ...
    }
}
出于某种愚蠢的原因,PHP不将每个文件的上传数据存储在
$\u FILES
中各自独立的子数组中,而是选择传播每个单独的错误/name/tmp\u 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再次给世界带来了一个过于复杂和麻烦的愚蠢行为。

你真的应该检查
if(count($\u FILES)>0)
。虽然您的答案是正确的(任何非0的数字都会转换为true),但这样的隐式转换在浏览代码时可能会让人困惑,也会让新程序员理解。@Brad:true。正确的形式还可以解释返回false、null等的函数,这些函数都是通过泛型检查拼凑在一起的。我想我属于“如果没有其他含义,那么越短越清晰”的一方,“如果(1+3>2)…”:)的另一方,如果用户想要上传一个零字节的文件呢?检查
$file['error']===UPLOAD\u ERR\u OK
,如果上传工作正常,不管文件大小,这保证是正确的。不是PHP,是你。这是你命名你的输入。所以,只怪你自己,我可不这么说。然而,这并没有改变这样一个事实:这是一种获取文件详细信息的愚蠢方式。