我使用this Stack Overflow answer中的一些代码来检查是否有任何文件已传递到文件input
:
if ($_FILES['image']['size'] == 0){
echo('test');
}
如果我上传了一个文件,那么echo语句应该 not 。但是,无论我是否附加了文件,echo语句似乎都会触发。
这是文件输入在表单中的样子:
<input type="file" name="image[]" id="uploadImage" multiple>
我猜测这个输入的名称与if
语句中正在检查的名称不匹配?也许阵列值让我失望了?
答案 0 :(得分:3)
当您在输入名称中使用括号时(多文件上载所必需的),$_FILES
的所有元素都将成为数组。您应该循环遍历数组以获取所有输入:
$file_count = count($_FILES['image']['size']);
for ($i = 0; $i < $file_count; $i++) {
// code that uses $_FILES['image']['size'][$i], $_FILES['image']['name'][$i], and so on
if ($_FILES['image']['size'][$i] == 0) {
echo "test";
}
}
答案 1 :(得分:1)
它设置为数组,该插槽中可以存在多个文件。
你必须使用foreach语句,因此它将遍历每个图像。
<?
if ($_FILES['image']) {
$file_ary = reArrayFiles($_FILES['image']);
foreach ($file_ary as $file) {
echo "File Size: {$file['size']}";
}
}
?>
您需要此功能才能使我的答案具有任何价值:
function reArrayFiles(&$file_post) {
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++) {
foreach ($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
如果没有这个功能,你可以很容易地做到这一点,正如Barmar的答案所示 - 但是这个数组以一种更有意义的方式清理默认的PHP
来源:http://php.net/manual/en/features.file-upload.multiple.php
答案 2 :(得分:0)
从输入标记中的name属性中删除括号,从输入标记中删除多个括号,然后使用检查方法。
<input type="file" name="image" id="uploadImage">