Neden formu gönderme $ _FILES ['thefile'] ['name'] [0] yerine $ _FILES ['thefile'] [0] ['name'] verir?

1 Cevap php

When you name several file input fields with the same name and an array index like so:
<input type='file' name='thefile[0]'>
<input type='file' name='thefile[1]'>

Then in the form submission you get this:
$_FILES['thefile']['name'][0]
$_FILES['thefile']['name'][1]
And so on with the other fields.

I find this annoying because it prevents reusing the code for non-array file uploads.
Wouldn't this be better:?
$_FILES['thefile'][0]['name'] and so on?

Birisi bu garip CGI / HTML uygulanmasının ardındaki nedeni biliyor mu?

1 Cevap

Bu talihsiz bir tasarım kararı olduğunu ve onun artık bunu değiştirmek için çok geç, tam bu davranışına dayanır ki orada çok fazla kod var.

Veri girişi formatı bu tür tespit ve sizin için uygun bir forma onu yeniden engeller ancak başka bir şey yoktur.

<?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);

Eğer çalıştırırsanız, aşağıdaki sonucu olsun.

[~]> 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
        )

)

$ _FILES Ve bitirdiniz için de yerine $. Ek bir hile olarak "remapping" kod $ _FILES gibi benzer yapısı ile tüm diziler için çalışıyor