首页后端开发PHP示例PHP实现单文件、多个单文件、多文件上传函数的封装

示例PHP实现单文件、多个单文件、多文件上传函数的封装

时间2024-02-02 08:08:03发布访客分类PHP浏览607
导读:收集整理的这篇文章主要介绍了示例PHP实现单文件、多个单文件、多文件上传函数的封装,觉得挺不错的,现在分享给大家,也给大家做个参考。本文实例讲述了PHP实现单文件、多个单文件、多文件上传函数的封装。分享给大家供大家参考,具体如下:表单:s....
收集整理的这篇文章主要介绍了示例PHP实现单文件、多个单文件、多文件上传函数的封装,觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP实现单文件、多个单文件、多文件上传函数的封装。分享给大家供大家参考,具体如下:

表单:

s.php

要在选择上传文件时能一次选择多个文件,那么就加multiple="multiple" ,还有注意下name="myFile1"name="myFile[]"的区别,单文件、多文件上传.

!doctyPE htML>
    html>
    head>
    meta charset="utf-8">
    tITle>
    无标题文档/title>
    /head>
    body>
    form action="sss.php" method="post" enctype="multipart/form-data">
      input type="file" name="myFile1" />
    br/>
      input type="file" name="myFile2" />
    br/>
      input type="file" name="myFile[]" />
    br/>
      input type="file" name="myFile[]" />
    br/>
      input type="file" name="myFile[]" multiple="multiple"/>
    br/>
      input type="submit" value="上传文件"/>
    /form>
    /body>
    /html>
    

上传函数的封装:

ss.php

?phpheader('Content-type:text/html;
    charset=utf-8');
//构建上传文件信息function getFiles(){
        $i=0;
    foreach($_FILES as $file){
        //因为这时$_FILES是个三维数组,并且上传单文件或多文件时,数组的第一维的类型不同,这样就可以拿来判断上传的是单文件还是多文件        if(is_string($file['name'])){
            //如果是单文件            $files[$i]=$file;
                $i++;
        }
elseif(is_array($file['name'])){
            //如果是多文件            foreach($file['name'] as $key=>
$val){
                    $files[$i]['name']=$file['name'][$key];
                    $files[$i]['type']=$file['type'][$key];
                    $files[$i]['tmp_name']=$file['tmp_name'][$key];
                    $files[$i]['error']=$file['error'][$key];
                    $files[$i]['size']=$file['size'][$key];
                    $i++;
            }
        }
    }
        return $files;
}
    //针对于单文件、多个单文件、多文件的上传//默认允许上传的文件只为图片类型,并且只有这些图片类型:$allowExt=array('jpeg','jpg','png','gif');
并且检查上传的文件是否为真实的图片$flag=true//默认上传保存的文件夹为本地的'uploads'文件夹,允许上传文件的大小最大为2Mfunction uploaDFile($fileInfo,$path='./uploads',$flag=true,$allowExt=array('jpeg','jpg','png','gif'),$maxSize=2097152){
    //判断错误号    if($fileInfo['error']===UPLOAD_ERR_OK){
            //检测上传文件的大小        if($fileInfo['size']>
$maxSize){
                $res['mes']=$fileInfo['name'].'上传文件过大';
        }
            $ext=getExt($fileInfo['name']);
        //检测上传文件的文件类型        if(!in_array($ext,$allowExt)){
                $res['mes']=$fileInfo['name'].'非法文件类型';
        }
        //检测是否是真实的图片类型        if($flag){
            if(!getimagesize($fileInfo['tmp_name'])){
                    $res['mes']=$fileInfo['name'].'不是真实图片类型';
            }
        }
        //检测文件是否是通过HTTP POST上传上来的        if(!is_uploaded_file($fileInfo['tmp_name'])){
                $res['mes']=$fileInfo['name'].'文件不是通过HTTP POST方式上传上来的';
        }
            if( $res ) return $res;
     //如果要不显示错误信息的话,用if( @$res ) return $res;
            //$path='./uploads';
        //如果没有这个文件夹,那么就创建一        if(!file_exists($path)){
                mkdir($path,0777,true);
                chmod($path,0777);
        }
            //新文件名唯一        $uniName=getUniName();
            $destination=$path.'/'.$uniName.'.'.$ext;
        //@符号是为了不让客户看到错误信,也可以删除        if(!@move_uploaded_file($fileInfo['tmp_name'],$destination)){
                $res['mes']=$fileInfo['name'].'文件移动失败';
        }
            $res['mes']=$fileInfo['name'].'上传成功';
            $res['dest']=$destination;
            return $res;
    }
else{
        //匹配错误信息        //注意!错误信息没有5        switch($fileInfo['error']){
                case 1:                $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
                    break;
                case 2:                $res['mes'] = '超过了HTML表单MAX_FILE_SIZE限制的大小';
                    break;
                case 3:                $res['mes'] = '文件部分被上传';
                    break;
                case 4:                $res['mes'] = '没有选择上传文件';
                    break;
                case 6:                $res['mes'] = '没有找到临时目录';
                    break;
                case 7:                $res['mes'] = '文件写入失败';
                    break;
                case 8:                $res['mes'] = '上传的文件被PHP扩展程序中断';
                    break;
        }
            return $res;
    }
}
    ?>
    

common.ss.php

?php//这两函数也可以一起放到ss.php里面去//得到文件扩展名function getExt($filename){
        return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}
//产生唯一字符串function getUniName(){
        return md5(uniqid(microtime(true),true));
}
    ?>
    

上传后文件的操作:

?phpheader("content-type:text/html;
    charset=utf-8");
    require_once 'ss.php';
    require_once 'common.ss.php';
    $files=getFiles();
    //修改允许上传文件的类型,为('jpeg','jpg','png','gif','html','txt'),也可以增加新的,如pdf,pptx等等$allowExt=array('jpeg','jpg','png','gif','html','txt');
foreach($files as $fileInfo){
        //修改上传保存的文件夹为本地的'imooc',如果没有这个文件夹,那么就创建一个    //'false'参数:不要检查上传的文件是否为真实的图片,因为要允许上传除开图片类型外的其他类型文件,如html、txt    $res=uploadFile($fileInfo,'imooc',false,$allowExt);
        echo $res['mes'],'br/>
    ';
        $uploadFiles[]=$res['dest'];
    //如果要不显示错误信息的话,用@$uploadFiles[]=$res['dest'];
}
    $uploadFiles=array_values(array_filter($uploadFiles));
    //这样便于保存到数据库PRint_r($uploadFiles);
    //打印查看上传保存的结果?>
    

相关学习推荐:PHP编程从入门到精通

以上就是示例PHP实现单文件、多个单文件、多文件上传函数的封装的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 示例PHP实现单文件、多个单文件、多文件上传函数的封装
本文地址: https://pptw.com/jishu/596580.html
完整示例php+pdo实现的购物车类 谈谈PHP中的 ->、=> 和 :: 符号

游客 回复需填写必要信息