Luk*_*kas 1 php file uploading
我有一个文件输入,可以选择多个看起来像这样的文件:
<input type = 'file' name = 'file[]' id = 'file' class = 'file' multiple = 'multiple' />
Run Code Online (Sandbox Code Playgroud)
当用户选择一个或多个文件时,使用Javascript我将id和类更新为'oldFile',然后添加另一个文件输入,但是使用file2 []而不是file [].只要用户继续选择文件,就会发生这种情况.然后,当用户提交表单时,文件将被发送到我的PHP脚本.我尝试了两种计算文件的方法,如下所示.
第一个是简单的
$files = count($_FILES);
Run Code Online (Sandbox Code Playgroud)
第二是
$f = 0;
foreach($_FILES as $b)
{
$f++;
}
$files = $f;
Run Code Online (Sandbox Code Playgroud)
但是,当我按特定顺序选择文件时,它会返回不正确的计数.
如果我选择两个文件,然后是一个文件,然后是两个文件并提交表单,它说我提交了4个文件.
如果我选择两个文件然后一个文件,它正确地说3个文件.
知道问题可能是什么(不确定我是否有意义)?
当你使用基于数组的文件上传名称时,PHP的$ _FILES有点不稳定.在这种情况下,创建的结构实际上是
$_FILES = array(
'name' => array(
0 => 'name of first file'
1= > 'name of second file'
etc...
'type' => array(
0 => 'type of first file',
1 => 'type of second file'
etc..
);
Run Code Online (Sandbox Code Playgroud)
这意味着您将获得与上传中跟踪的字段数相匹配的常量计数($ _ FILES).要准确计算上传的文件数量,您需要计算其中一个子键,例如.
count($_FILES['name']);
Run Code Online (Sandbox Code Playgroud)
不要问我为什么这样做.PHP的设计已经足够愚蠢了,这只是众多证明其基础愚蠢的例子之一.
一个更明智/理智的设计师会使用
$_FILES = array(
0 => array(... all data about file #1),
1 => array('... all data about file #2),
etc...
)
Run Code Online (Sandbox Code Playgroud)