【问题标题】:HTML 5 multi file upload with PHP使用 PHP 上传 HTML 5 多文件
【发布时间】:2010-07-09 18:04:13
【问题描述】:

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

<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'];
}

【问题讨论】:

  • “已解决更新”下的代码相当糟糕。 is_array($fdata['name']) 将始终评估为 false,这意味着大多数示例永远不会运行。请参阅此页面上接受的答案。

标签: php html


【解决方案1】:

试试

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

更新:

Google 发现 this tutorial 可能对您有所帮助

【讨论】:

  • 的更新:太棒了!这就是问题所在。数组结构根本不同,这会阻止 foreach 正确循环文件。多么可怕的方法,我很惊讶 PHP 中没有预先构建的函数来处理这个问题......
  • @kylex:HTML5 仍处于设计阶段;由于这个原因,PHP 可能没有添加对它的直接支持。
  • 非常感谢您提供简单的解决方案和资源链接。
【解决方案2】:

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

$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;

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 一个好主意,但不是问题。事实上,Firefox hacks 部分显示 multiple as multiple=""
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2013-02-15
    • 2012-09-23
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多