【发布时间】:2015-04-08 21:04:13
【问题描述】:
protected function upload($name) {
$files = array();
// if block 1
if(!empty($_FILES[$name]['tmp_name'])) {
for($i = 0; $i < count($_FILES[$name]['tmp_name']); $i++) {
// if block #2
if(!empty($_FILES[$name]['tmp_name']) && is_uploaded_file($_FILES[$name]['tmp_name'][$i])) {
# we're dealing with multiple uploads
$handle['key'] = $name;
$handle['name'] = $_FILES[$name]['name'][$i];
$handle['size'] = $_FILES[$name]['size'][$i];
$handle['type'] = $_FILES[$name]['type'][$i];
$handle['tmp_name'] = $_FILES[$name]['tmp_name'][$i];
// put each array into the $files array
array_push($files,$this->_process_image($handle));
}
#block 3...
}
return $files;
}
return false;
}
我正在尝试创建一个函数来处理多个上传场景:每次提交多个文件上传,每次提交一个文件上传,使用各种 file 输入。
以上方法...
使用两个输入按预期工作
<input name="multiple[]" type="file">
<input name="multiple[]" type="file">
和单个输入使用多个...
<input name="multiple[]" type="file" multiple>
但不是使用单个上传的单个输入
<input name="single" type="file">
现在,我注意到,如果我将 single 的名称更改为 single[],它会起作用。所以我复制了块 #2 并将其添加为另一个块(其中 #3 是),但是这次没有使用 [$i] 并且它适用于 single 输入,但是如果我有多个输入但只使用一个输入到上传一个文件(不是同时使用两个输入上传 2 个文件)。
我的大脑很痛。我怎样才能让它适用于所有这些场景?
编辑:当我说它不起作用时,我的意思是它甚至没有处理。没有输出,没有错误,什么都没有。我认为它只是被跳过了,这就是我添加块 #3 的原因...
【问题讨论】:
-
我不明白,为什么你在挣扎,这里有详细的文档php.net/manual/en/features.file-upload.multiple.php#53240
-
@SaiPhani 我经历过这一切。我在上传多个文件时没有遇到问题,是 single 文件让我对我的代码感到悲痛。
-
@Tim,当您有一组文件时,为什么需要一个文件?如果没有其他元素,则数组的第一个元素只是单个文件。
-
在上传多个文件或单个文件时,$_FILES 数组的格式不同。尝试like this 来规范化数组。
-
@Tim ,我看到您在发送单个文件时遇到问题。我怀疑您的上传不适用于单个文件。在 (file-upload.php) 尝试 并检查您是否能够接收到您打算上传的文件。
标签: php file-upload