php单文件上传函数封装

PHP在上传函数未免会使用到一系列的条件语句,来判断检测上传的文件,所以每次上传的时候,单独处理的话,会比较繁琐散乱,所以通常情况下需要封装成函数进行调用:

调用方法:uploadFile( $_FILES['myFile'] );

函数实现逻辑:


(1)添加默认的文件类型数组 $allowEx
(2)添加可上传文件最大字节数的限制 $maxsize
(3)获取文件扩展名
(4)获取随机不重复文件名(包括路径)
(5)判断DOWN文件夹是否存在,不存在就生成该文件夹
(6)判断错误信息
(7)判断是否为非法文件类型 in_array()
(8)判断文件的字节大小,是否超过限制的大小
(9)判断是否为一个合法的文件 getimagesize
(10)判断是否是以POST上传的文件 is_uploaded_file( $fileInfo['tmp_name'] )
(11)在指定目录下生成该上传的文件 move_uploaded_file( $fileInfo['tmp_name'] , $path )


function uploadFiles($fileInfo, $allowExt = array('gif', 'jpg', 'jpeg', 'png', 'wbmp'), $maxsize = 1048570006, $imgFlag = true)
{
    $mes = '';

    //判断文件是否是通过HTTP_POST上传上来的
    $ext = getExt($fileInfo['name']); //获取扩展名
    $filename = getUniName() . '.' . $ext; //获取随机文件名
    $path = 'uploads';
    //生成文件夹
    if (!file_exists($path)) {
        mkdir($path, 0777, true);
    }

    $destination = $path . '/' . $filename; //生成文件路径

    //判断上传错误信息
    if ($fileInfo['error'] == UPLOAD_ERR_OK) {

        //判断是否为图片(非法文件类型)
        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 {
            if (move_uploaded_file($fileInfo['tmp_name'], $destination)) {
                exit('文件上传成功');
            } else {
                exit('文件上传失败');
            }
        }
    }
    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 $mes;
}



猜你喜欢

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