Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提交和使用XmlHttpRequest时$\u文件结构的差异_Php_Javascript - Fatal编程技术网

Php 提交和使用XmlHttpRequest时$\u文件结构的差异

Php 提交和使用XmlHttpRequest时$\u文件结构的差异,php,javascript,Php,Javascript,我正在使用javascript FileAPI和XmlHttpRequest构建一个文件上传程序,并通过一个隐藏的iframe回退上传。这两个上传都是用PHP处理的 然而,我发现$\u文件数组的结构有一个恼人的差异 使用iframe回退时,阵列将如下所示: $_FILES = array( 'files' => array( 'name' => array( 0 => 'name.jpg' ), '

我正在使用javascript FileAPI和XmlHttpRequest构建一个文件上传程序,并通过一个隐藏的iframe回退上传。这两个上传都是用PHP处理的

然而,我发现$\u文件数组的结构有一个恼人的差异

使用iframe回退时,阵列将如下所示:

$_FILES = array(
    'files' => array(
        'name' => array(
            0 => 'name.jpg'
        ),
        'type' => array(
            0 => 'image/jpeg'
        )
        ...
    )
)
(我使用多个名为文件[]的输入)

当我使用XmlHttpRequest上传时,数组如下所示:

$_FILES = array(
    'filename' => array(
        'name' => 'name.jpg',
        'type' => 'image/jpeg'
        ...
    ),
    ...
)
有没有办法让这一切都变得一样?下面是我如何构建xhr请求的内容:

var data = new FormData(), xhr = new XMLHttpRequest();

data.append(file.name, file);

xhr.open('POST', 'process.php', true);

xhr.onload = function(e) {
    ...
};
xhr.send(data);
目前,我像这样解析两个不同的数组,这似乎是可行的

 if(isset($_FILES['files']['name']))
 { // old skool $_FILES array
    foreach($_FILES['files'] as $key => $values)
    {
        foreach($values as $index => $value)
        {
            $files[$index][$key] = $value;
        }
    }
 } 
 else
 { // XMLHttpRequest $_FILES
    $files = $_FILES;
 }

不,这完全是PHP处理基于数组的文件字段命名的愚蠢方式。如果你有

<input type="file" name="whatever[]" />
                                 ^^---

^^---

您将看到基于子阵列的愚蠢版本。没有办法解决这个问题-它内置于PHP的核心。

我明白了。我用PHP处理OP的方式编辑了我的OP,看起来很公平?所以你基本上只是把普通的“友好”数组版本转换成子数组的东西?那就行了。但这让我不寒而栗。这是我对PHP的主要不满之一。它应该将数组构建为
$\u FILES['file'][0…x][name/error/type/size]
,并使单个文件上载遵循相同的约定,使用单个0索引。还有一个PHP规划/设计糟糕的例子。唉,它也是使用最广泛的语言之一,写它能让我赚钱:p