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,是你。这是你命名你的输入。所以,只怪你自己,我可不这么说。然而,这并没有改变这样一个事实:这是一种获取文件详细信息的愚蠢方式。