if($ _FILES [' image'] [' size'] == 0 {}返回True即使我上传了文件

时间:2017-07-13 18:08:09

标签: php

我使用this Stack Overflow answer中的一些代码来检查是否有任何文件已传递到文件input

if ($_FILES['image']['size'] == 0){

    echo('test');

}

如果我上传了一个文件,那么echo语句应该 not 。但是,无论我是否附加了文件,echo语句似乎都会触发。

这是文件输入在表单中的样子:

<input type="file" name="image[]" id="uploadImage" multiple>

我猜测这个输入的名称与if语句中正在检查的名称不匹配?也许阵列值让我失望了?

3 个答案:

答案 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">