我正在做一个多文件上传表单,我已经成功地在这个网站的帮助下完成了它。现在我需要知道并理解它是如何工作的,所以我不能只复制代码。
我们有一个用HTML上传的输入:
<input type="file" name="file[]" multiple />
所有都保存在php变量中:
$_FILES['file']['tmp_name'][$i]
name =“file []”中的括号如何为这样的数组创建第三维?我宁愿想象一下:$ _FILES ['file [$ i]'] ['tmp_name']。如果没有它们,为什么它不起作用呢? 谢谢!
答案 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。