使用HTML5和PHP加载多个文件

时间:2010-10-20 18:39:22

标签: php file html5 input

我正在尝试使用HTML5加载多个文件。 这是我在某些网站上找到的代码。 在PHP代码中,它不会将其识别为数组。

我做错了吗?有人能告诉我一个有效的解决方案吗?

感谢。

的index.html

<form action='save.php' method='post' enctype='multipart/form-data'>
<input name="uploads" type="file" multiple="multiple" />
<input type='submit' value="Upload File">
</form>

save.php

function GetFiles() {
        $files = array();
        $fdata = $_FILES["uploads"];
        if (is_array($fdata["name"])) {//This is the problem
                for ($i = 0; $i < count($fdata['name']); ++$i) {
                        $files[] = array(
                            'name' => $fdata['name'][$i],
                            'tmp_name' => $fdata['tmp_name'][$i],
                        );
                }
        } else {
                $files[] = $fdata;
        }

        foreach ($files as $file) {
                // uploaded location of file is $file['tmp_name']
                // original filename of file is $file['file']
        }
}

3 个答案:

答案 0 :(得分:9)

您需要制作某种名称数组:

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

就像你以前使用复选框一样。

答案 1 :(得分:7)

作为数组的

表单变量必须使用[]命名,否则PHP不会将其视为数组。所以:

<form action='save.php' method='post' enctype='multipart/form-data'> 
<input name="uploads[]" type="file" multiple="multiple" /> 
<input type='submit' value="Upload File"> 
</form> 

应该这样做。

答案 2 :(得分:1)

我知道这是一个旧线程,但我使用这个小脚本将$ _FILES数组的(对我来说)令人困惑的布局转换为更易读的形式。 Name_input是您在HTML中为Input对象指定的名称。

for($i=0; $i<count($_FILES['name_input']['name']); $i++) {
    $betterfiles[] = array(
        "name" => $_FILES['name_input']['name'][$i],
        "type" => $_FILES['name_input']['type'][$i],
        "tmp_name" => $_FILES['name_input']['tmp_name'][$i],
        "error" => $_FILES['name_input']['error'][$i],
        "size" => $_FILES['name_input']['size'][$i]
    );
}