求助:PHP文件上传函数函数封装,文件类型一直无法通过

这段代码定义了一个名为`upload_single`的PHP函数,用于处理单个文件上传。它首先检查文件是否有效,然后判断文件路径是否存在,接着检查文件在上传过程中是否出错,再验证文件类型和大小是否符合设定的限制。如果所有验证都通过,函数会生成一个唯一的文件名,并尝试将文件移动到指定目录。如果上传成功,返回文件名;否则,返回错误信息。
摘要由CSDN通过智能技术生成

下面是封装代码

function upload_single($file, $allow_type, $path, &$error, $allow_format = array(), $max_size)

{

    // 1.判断文件是否有效

    if (!is_array($file) || !isset($file['error'])) {

        // (不是一个文件,或者文件里没有参数error)文件无效

        $error = '不是一个有效的上传文件!';

        return false;

    }

    // 2.判断文件路径是否有效 is_dir,判断给定参数是否是一个路径,返回值为布尔值.

    if (!is_dir($path)) {

        //路径不存在

        $error = "文件路径不存在!";

        return false;

    }

    //3.判断文件上传的过程中是否出错

    switch ($file['error']) {

        case 1:

        case 2:

            $error = "文件超出服务器允许大小";

            return false;

        case 3:

            $error = "文件上传过程里出现问题,只上传了部分";

            return false;

        case 4:

            $error = "用户未选中要上传文件";

            return false;

        case 5:

        case 6:

            $error = "文件保存失败";

            return false;

    }

    // 4.判断MINE类型  in_array — 检查数组中是否存在某个值

    if (!in_array($file['type'], $allow_type)) {

        $error = "当前文件类型不支持上传!";

        return false;

    }

    // 5.判断后缀是否允许

    // 取后缀,取出的结果默认带有点号 如.exe .txt

    $ext = ltrim(strrchr($file['name'], '.'), '.');

    if (!empty($allow_format) && !in_array($ext, $allow_format)) {

        // 不允许上传

        $error = "当前文件的格式不允许上传!";

        return false;

    }

    // 6.判断文件大小是否满足业务需求

    if ($file['size'] > $max_size) {

        // 文件过大

        $error = '当前上传文件超出大小,最大允许为' . $max_size . "字节";

    }

    // 7.2.构造文件名:类型 年 月 日+随机字符串.$ext strstr:

    $fullname = strstr($file['type'], '/', TRUE) . date('YYYYmmdd');

    // 产生随机字符串

    for ($i = 0; $i < 4; $i++) {

        // chr():可以将得到的数值转化为字母

        $fullname .= chr(mt_rand(65, 90));

    }

    // 拼凑后缀

    $fullname .= '.' . $ext;

    //7.移动到指定目录

    if (!is_uploaded_file($file['tmp_name'])) {

        // 文件非上传

        $error = '错误:不是上传文件';

        return false;

    }

    if (move_uploaded_file($file['tmp_name'], $path . '/' . $fullname)) {

        // 上传成功

        return $fullname;

    } else {

        // 移动失败

        $error = '文件上传失败';

        return false;

    }

};

// 提供数据

$file = $_FILES['image'];

$path = 'uploads/';

$allow_type = array('image/jpg', 'image/jpeg', 'image/gif');

$allow_format = array('jpg', 'gif', 'jpeg');

$max_size = '8000000';


 

if ($filename = upload_single($file, $allow_type, $path, $error, $allow_format, $max_size)) {

    echo $filename;

} else {

    echo $error;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值