PHP多文件上传,从数组

时间:2015-09-26 15:51:11

标签: php arrays

我已经创建了一个函数来处理sinlge文件上传和多个文件上传,以便在检测到多个文件上传时,不使用PHP的默认数组设置,并创建一个更易于管理的数组。

多个文件HTML:

  <form enctype="multipart/form-data" action="upload.php" method="post">
        <input type="file" name="userFile[]" class="userFile">
        <input type="file" name="userFile[]" class="userFile">
        <input type="file" name="userFile[]" class="userFile">
        <input type="submit" name="submit" value="Upload">
    </form>

备用单个文件HTML:

  <form enctype="multipart/form-data" action="upload.php" method="post">
        <input type="file" name="userFile" class="userFile">
        <input type="submit" name="submit" value="Upload">
    </form>

PHP:

function checkUploadedFile()
{
    $file;
    $files;
    $file_arr_keys;

    foreach($_FILES as $element) {

        if (is_array($element['name'])) {

            $file_count = count($element['name']);
            $file_arr_keys = array_keys($element);

            for ($i = 0; $i < $file_count; $i++) {
                foreach ($file_arr_keys as $key) {
                    $files[$i][$key] = $element[$key][$i];
                }
            }

        } else {
            $file = $element;
        }
    }

    if (isset($file)) return $file;
    return $files;

}

如果使用多个文件表单并且只上传了一个文件,则会创建类似这样的内容:

Array
(
    [0] => Array
        (
            [name] => IMG_0015.JPG
            [type] => image/jpeg
            [tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpMEaSSc
            [error] => 0
            [size] => 5191142
        )

    [1] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

    [2] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

)

问题:如果其他文件元素为空,如何更改上面的输出数组以使其只有一个元素?如:

Array
(
    [0] => Array
        (
            [name] => IMG_0015.JPG
            [type] => image/jpeg
            [tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpMEaSSc
            [error] => 0
            [size] => 5191142
        )
)

3 个答案:

答案 0 :(得分:2)

只需通过array_filter()功能

过滤您的数组
$filtered = array_filter($files, function($file){
    return $file['error'] === 0; 
});

知道了! :)

答案 1 :(得分:0)

好吧,通过比较你的数组,似乎每个空文件都有不同的值。你可以使用它们中的任何一个。

迭代$ files数组,如果满足任何bool大小,错误,名称和/或类型为空或0,请使用unset()函数将其从数组中删除。

EG

foreach ($files as $key => $file) {
    if ($file['size'] == 0) {
        unset($files[$key]);
    }
}

或者你可以将这个逻辑调整到上面的函数中,而不是在第一时间设置它。

答案 2 :(得分:0)

您可以忽略循环中的空文件。 将您的php文件更改为:

function checkUploadedFile()
{
    $file;
    $files;
    $file_arr_keys;

    foreach($_FILES as $element) {

        if (is_array($element['name'])) {

            $file_count = count($element['name']);
            $file_arr_keys = array_keys($element);

            for ($i = 0; $i < $file_count; $i++) {
                if(!$element[name][$i]){
                    next;
                }
                foreach ($file_arr_keys as $key) {
                    $files[$i][$key] = $element[$key][$i];
                }
            }

        } else {
            $file = $element;
        }
    }

    if (isset($file)) return $file;
    return $files;

}