Php 多个图像上载中未上载的所有图像

Php 多个图像上载中未上载的所有图像,php,image-uploading,Php,Image Uploading,我试图上传多个文件,它上传得很好。但我也在检查错误(类型和大小)并捕获数组变量中的错误。比如说,当我选择3张图片时,其中一张出现了一些错误(超过允许的大小和/或类型不允许),这是第一张图片,然后其他两张图片也没有上传。如果有错误的文件是第二个文件,则只上载第一个文件,当错误图像是最后一个文件时,则上载前两个文件。我想做的是,即使一个或多个图像中有错误,其他有效图像也应该被上传,无论它们被选择的顺序如何 这是我的剧本: function filesupload($files) // here fi

我试图上传多个文件,它上传得很好。但我也在检查错误(类型和大小)并捕获数组变量中的错误。比如说,当我选择3张图片时,其中一张出现了一些错误(超过允许的大小和/或类型不允许),这是第一张图片,然后其他两张图片也没有上传。如果有错误的文件是第二个文件,则只上载第一个文件,当错误图像是最后一个文件时,则上载前两个文件。我想做的是,即使一个或多个图像中有错误,其他有效图像也应该被上传,无论它们被选择的顺序如何

这是我的剧本:

function filesupload($files) // here files is $_FILES array
{

    $i = 0;
    $errors = array();
    $maxfilesize = 1*1024*1024; // 1 MB
    $num = count($files['name']);
    $allowed_types = array('image/jpeg', 'image/png');

    foreach($files['tmp_name'] as $key=>$tmp_name)
    {
        $tmpname = $files['tmp_name'][$key]; // file temp name
        $fsize = $files['size'][$key];  // file size

        if(!empty($files['name'][$key]))
        {
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $ftype = finfo_file($finfo, $files['tmp_name'][$key]); // file mime type
        }

        //validations for file type and size

        // no file selected
        if(empty($files['name'][$key]))
        {
            $errors[] = 'Select at least one file for uploading';
        }

        // file type not allowed
        if(in_array($ftype, $allowed_types) === false)
        {
            $errors[] = 'One or more files have invalid file extension';
        }

        // file size validation
        if($fsize > $maxfilesize)
        {
            $errors[] = 'Size of one or more files is more than allowed';
        }

        // if no errors uploaded file(s)
        if(empty($errors))
        {
            $path = 'images/';
            $newfilename = time().'_'.rand(100000, 999999).'_'.$files['name'][$key];
            $move = move_uploaded_file($tmpname, $path.$newfilename);
            if($move)
            {
                $i = $i + 1;
                if($i == $num)
                {
                    $msg = 'Files uploaded';
                    return $msg;
                }
            }
        }
        elseif(!empty($errors))
        {
            return $errors;
        }
    }

}

在循环中,您已选中
$error[]
。所以当错误出现在第一个文件中时,数组将不会为空,其他图像将不会上载

请尝试以下操作:

function filesupload($files) // here files is $_FILES array
{
    $i = 0;
    $errors = array();
    $maxfilesize = 1*1024*1024; // 1 MB
    $num = count($files['name']);

    $allowed_types = array('image/jpeg', 'image/png');

    foreach($files['tmp_name'] as $key=>$tmp_name)
    {
        $tmpname = $files['tmp_name'][$key]; // file temp name
        $fsize = $files['size'][$key];  // file size

        if(!empty($files['name'][$key]))
        {
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $ftype = finfo_file($finfo, $files['tmp_name'][$key]); // file mime type
        }

        //validations for file type and size

        // no file selected
        if(empty($files['name'][$key]))
        {
            $errors[$key] = 'Select at least one file for uploading';
        }

        // file type not allowed
        if(in_array($ftype, $allowed_types) === false)
        {
            $errors[$key] = 'One or more files have invalid file extension';
        }

        // file size validation
        if($fsize > $maxfilesize)
        {
            $errors[$key] = 'Size of one or more files is more than allowed';
        }

        // if no errors uploaded file(s)
        if(!isset($errors[$key]))
        {
            $path = 'images/';
            $newfilename = time().'_'.rand(100000, 999999).'_'.$files['name'][$key];
            $move = move_uploaded_file($tmpname, $path.$newfilename);
            if($move)
            {
                $i = $i + 1;
                if($i == $num)
                {
                    $msg = 'Files uploaded';
                    return $msg;
                }
            }
        }
    }

    if(!empty($errors))
    {
        return $errors;
    }
}

我已将错误消息数组从
$errors[]
更改为
$errors[$key]
,并进行了检查。所以,如果您有4个文件输入,并且第1个和第3个文件有错误,那么第2个和第4个文件将上载,并且您将在数组的第0个和第2个索引中得到错误

谢谢你,安克尔。这有帮助。