单/多个不同类型文件上传函数统一封装

在上传文件的时候通常会用到单文件上传,也会用到多文件上传,比如在上传缩略图的时候等等,那在进行这些操作时候,必将需要把这些操作封装成函数,方便开发。但是在有些上传情况比较复杂的情况,不明确单文件上传还是多文件上传的时候,就需要封装一个多文件单文件上传的统一函数:

封装函数名:uploadFile() 

function uploadFile($path = 'uploads', $allowExt = array('gif', 'jpg', 'jpeg', 'png', 'wbmp', 'txt'), $maxsize = 1048570006, $imgFlag = true)
{

    $i = 0;
    $uploadedFiles = array();

    //生成文件夹
    if (!file_exists($path)) {
        mkdir($path, 0777, true);
    }

    $files = buildInfo($_FILES);

    foreach ($files as $fileInfo) {
        //判断上传错误信息
        if ($fileInfo['error'] == UPLOAD_ERR_OK) {
            $ext = getExt($fileInfo['name']); //获取扩展名
            $filename = getUniName() . '.' . $ext; //获取随机文件名
            $destination = $path . '/' . $filename; //生成文件路径

            //判断是否为图片(非法文件类型)
            if (!in_array($ext, $allowExt)) {
                exit('该文件不是图片 : 非法文件类型');
            }

            if ($fileInfo['size'] > $maxsize) {
                exit('文件过大');
            }
            //检测是否为图片
            if ($imgFlag) {
                //如何验证图片是否是一个真正的图片类型
                if (!getimagesize($fileInfo['tmp_name'])) {
                    exit('不是合法文件');
                }
            }

            //在指定文件夹下生成文件
            if (!is_uploaded_file($fileInfo['tmp_name'])) {
                exit('文件不是通过HTTP_POST文件上传的');
            } else {
                //判断文件是否是通过HTTP_POST上传上来的
                if (move_uploaded_file($fileInfo['tmp_name'], $destination)) {
                    $fileInfo['name'] = $filename;
                    unset($fileInfo['tmp_name'], $fileInfo['error']);
                    $uploadedFiles[$i] = $fileInfo;

                    $i++;

                    $mes = '文件上传成功';
                } else {
                    $mes = '文件上传失败';
                }
            }
        } else {
            switch ($fileInfo['error']) {
                case UPLOAD_ERR_INI_SIZE:
                    $mes = '上传文件大小超过服务器允许上传的最大值';
                    break;

                case UPLOAD_ERR_NO_TMP_DIR:
                    $mes = '没有找不到临时文件夹';
                    break;

                case UPLOAD_ERR_CANT_WRITE:
                    $mes = '文件不可写';
                    break;

                case UPLOAD_ERR_FORM_SIZE:
                    $mes = '上传文件大小超过隐藏表单设置允许上传的最大值MAX_FILE_SIZE';
                    break;

                case UPLOAD_ERR_EXTENSION:
                    $mes = '文件上传扩展没有打开';
                    break;

                case UPLOAD_ERR_PARTIAL:
                    $mes = '文件只有部分被上传';
                    break;
            }
        }
    }

    return $uploadedFiles;
}

  在这个函数中用到了,之前的buildInfo()方法 , 这个方法主要是来格式化规整杂乱上传文件信息:


function buildInfo($files)
{
    $arr_item = array();
    $arr_All = array();
    $num = 0;

    foreach ($files as $my_file) {

        //单文件 ( 多文件则对应数组类型 )
        if (is_string($my_file['name'])) {

            $arr_All[$num] = $my_file;
            $num++;

        } else {

            for ($j = 0; $j < count($my_file['name']); $j++) {

                $arr_item = [];

                foreach ($my_file as $key => $my_item) {
                    $arr_item[$key] = $my_item[$j];
                }

                $arr_All[$num++] = $arr_item;
            }
        }
    }

    return $arr_All;
}


在进行调用时 :  $info = uploadFile();   print_r($info); 

打印结果:




猜你喜欢

转载自blog.csdn.net/wu5229485/article/details/79826597