使用PHP上传HTML 5多文件

时间:2010-07-09 18:04:13

标签: php html5 multifile

这是我的代码,我想知道我做错了它没有显示名称。

<form action = "self.php" method="post" enctype="multipart/form-data">
<input type="file" name="imageURL[]" id="imageURL" multiple="" />
<input type="submit" value="submit" name="submit" />
</form>

无法处理的处理信息:

foreach ($_FILES['imageURL'] as $files[]) { 
    echo $files['file'];
}

修改

将foreach循环更改为:

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name'];
}

仍然没有打印出来。

然而,当我做这样的事情时:

foreach ($_FILES['imageURL']['name'] as $filename) { 
    echo $filename;
}

文件名确实打印出来。我不知道这意味着什么。



已解决更新:

由John Conde链接,上传多个文件时的阵列交错结构与上传单个文件时不同。要使用foreach,我们必须重组数组。

$files=array();
$fdata=$_FILES['imageURL'];
if(is_array($fdata['name'])){
for($i=0;$i<count($fdata['name']);++$i){
        $files[]=array(
    'name'    =>$fdata['name'][$i],
    'type'  => $fdata['type'][$i],
    'tmp_name'=>$fdata['tmp_name'][$i],
    'error' => $fdata['error'][$i], 
    'size'  => $fdata['size'][$i]  
    );
    }
}else $files[]=$fdata;

现在我们可以使用foreach循环:

foreach ($files as $file) { 
    echo $file['name'];
}

3 个答案:

答案 0 :(得分:13)

尝试

foreach ($_FILES['imageURL'] as $file) { 
    echo $file['name'];
}

<强>更新

Google找到this tutorial可能会对您有所帮助

答案 1 :(得分:3)

不是使用for()并重新计算数组中的项数,而是可以使用更优雅的foreach()

$files=array();
$fdata=$_FILES['file'];
if(is_array($fdata['name'])){
    foreach ($fdata['name'] as $i => $d) {
        $files[] = array(
        'name' => $d,
        'tmp_name' => $fdata['tmp_name'][$i]
        );
    }
}
else $files[]=$fdata;

答案 2 :(得分:1)

也许我错了,但是不会设置multiple=""关闭多个上传内容?只需单独使用multiple,如HTML5 spec所示,或者对于XHTML兼容性,multiple="multiple"

<input type="file" name="imageURL[]" id="imageURL" multiple />