【问题标题】:Why form posting yields $_FILES['thefile']['name'][0] instead of $_FILES['thefile'][0]['name']?为什么表单发布产生 $_FILES['thefile']['name'][0] 而不是 $_FILES['thefile'][0]['name']?
【发布时间】:2010-12-28 18:38:08
【问题描述】:

当您使用相同名称和数组索引命名多个文件输入字段时,如下所示:
<input type='file' name='thefile[0]'>
<input type='file' name='thefile[1]'>

然后在表单提交中你会得到这个:
$_FILES['thefile']['name'][0]
$_FILES['thefile']['name'][1]
其他字段依此类推。

我觉得这很烦人,因为它会阻止重复使用非数组文件上传的代码。
这不是更好吗:?
$_FILES['thefile'][0]['name'] 等等?

有人知道这个奇怪的 CGI/HTML 实现背后的原因吗?

【问题讨论】:

    标签: php html forms post cgi


    【解决方案1】:

    这是一个不幸的设计决定,现在改变它为时已晚,有太多代码依赖于这种确切的行为。

    但是,没有什么可以阻止您检测这种输入数据格式并将其重写为适合您的形式。

    <?php
    $in = array();
    $in['name'] = array('name1', 'name2', 'name3');
    $in['tmp_name'] = array('tmpname1', 'tmpname2', 'tmpname3');
    
    
    $files = array();
    
    // remap input data into desired format
    foreach (array_keys($in) as $field) {
        foreach ($in[$field] as $index => $item) {
            $files[$index][$field] = $item;
        }
    }
    
    print_r($in);
    print_r($files);
    

    如果你运行它,你会得到以下结果。

    [~]> php test.php
    Array
    (
        [name] => Array
            (
                [0] => name1
                [1] => name2
                [2] => name3
            )
    
        [tmp_name] => Array
            (
                [0] => tmpname1
                [1] => tmpname2
                [2] => tmpname3
            )
    
    )
    Array
    (
        [0] => Array
            (
                [name] => name1
                [tmp_name] => tmpname1
            )
    
        [1] => Array
            (
                [name] => name2
                [tmp_name] => tmpname2
            )
    
        [2] => Array
            (
                [name] => name3
                [tmp_name] => tmpname3
            )
    
    )
    

    用 $in 代替 $_FILES 就完成了。作为一个额外的噱头,“重新映射”代码适用于所有与 $_FILES 结构相似的数组

    【讨论】:

    • 如果你能提供一个简单的 sn-p 来为人们重新调整 FILES 数组,那就太好了。
    • 谢谢,我就是这样解决的,我知道,这并不难。正如你所说,这是一个不幸的决定。我不知道,也许 HTML5 规范可能包含 的属性,它使数组以这种方式形成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2014-12-31
    • 1970-01-01
    • 2020-07-08
    • 2014-09-03
    相关资源
    最近更新 更多