加载多个文件后面的PHP机制

时间:2014-07-24 13:20:17

标签: php html

我正在做一个多文件上传表单,我已经成功地在这个网站的帮助下完成了它。现在我需要知道并理解它是如何工作的,所以我不能只复制代码。

我们有一个用HTML上传的输入:

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

所有都保存在php变量中:

$_FILES['file']['tmp_name'][$i]

name =“file []”中的括号如何为这样的数组创建第三维?我宁愿想象一下:$ _FILES ['file [$ i]'] ['tmp_name']。如果没有它们,为什么它不起作用呢? 谢谢!

2 个答案:

答案 0 :(得分:0)

由于您要上传(可能)多个文件,因此必须有一种方法可以正确保存它们。

所以系统是这样的:

$_FILES: 
The superglobal where the FILES will be saved
['file']: 
In this array the actual FILEDATA will be saved.
Another possibilty at this localtion would be ['error'], 
where outcoming error within the upload will be stored.
['tmp_name']:
Here you can access all the file names that were uploaded
Another possibilty on this possition would be ['type'],
where the type of the file will be stored (e.g. 'text/html')
[$i] is there to identify the exact file you within the uploaded files.

the official documentation获取以下示例:

array(1) {
    ["files"]=>array(2) {
        ["tmp_name"]=>array(2) {
            [0]=>string(9)"file0.txt"
            [1]=>string(9)"file1.txt"
        }
        ["type"]=>array(2) {
            [0]=>string(10)"text/plain"
            [1]=>string(10)"text/html"
        }
    }
}

希望它清晰易懂!

答案 1 :(得分:0)

它遵循所有其他名称的模式:如果您将[]附加到名称,PHP将为您创建一个数组。就这么简单。

/foo.php?bar[]=baz&bar[]=42

这将导致:

$_GET['bar'][0] = 'baz'
$_GET['bar'][1] = '42'

表单输入相同:

<input name="foo[]">

这将创建一个多维$_POST数组:

$_POST['foo'][..]

$_FILES的唯一区别在于结构略微不直观。它不是:

$_FILES['foo'][0]['tmp_name']
$_FILES['foo'][0]['name']
$_FILES['foo'][1]['tmp_name']
$_FILES['foo'][1]['name']
...

但相反它:

$_FILES['foo']['tmp_name'][0]
$_FILES['foo']['name'][0]
$_FILES['foo']['tmp_name'][1]
$_FILES['foo']['name'][1]

这就是它的方式。是的,这个API本来可以设计得更好,但那可能是很多PHP。