欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Thinkphp实现文件上传以及去除重复数据

程序员文章站 2022-04-14 16:44:16
...

1.第一步 我们应该在控制器中写关于文件上传的方法 我在这里是用的upload()方法;

public function upload(){
        if(IS_GET){
            $this->display();
            exit;
        }
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize = 0 ;// 设置附件上传大小
        //$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
        $upload->exts = array('csv');
        $upload->rootPath = './Public/Upload/'; // 设置附件上传根目录
        $upload->savePath = ''; // 设置附件上传(子)目录
        // 上传文件
        $info = $upload->upload();
        if(!$info) {// 上传错误提示错误信息
          $this->error($upload->getError());
        }else{// 上传成功
        // $this->success('上传成功!' . $info['file']['savepath'].$info['file']['savename']);
          $file ='./Public/Upload/' . $info['file']['savepath'].$info['file']['savename'];
          $this->import($file);    
        }       
    }

2.转换编码格式后,然后开始解析csv文件,判断这个csv文件中是否存在与数据库一样的数据,有重复我们就去掉重复数据。首先我们以只读的方式打开这个文件(fopen($file,'r')),我们用主键来判断是否有重复的,这里主键是no,所以我们先用getFie方法获取到原表中所有的no,把这些no数据存入到一个数组中,在用一个空数组存放没有重复的数据。

 $fp = fopen($file,'r');//打开文件或者 URL 
        if($fp){
            $fields = array('no','name','sex');
            $model = M('student');
            $arrNO = $model->getField('no',true);
            $arr = array();
            $str = array();
            while (($row = fgetcsv($fp,1000,","))!==false) {  //从文件指针中读入一行并解析 CSV 字段
                 $row = array_combine($fields, $row);//创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 
               
                 if(in_array($row['no'],$arrNO)){
                     $str[] = $row['no'] . '存在';
                 }else{           
                    $arrNO[] = $row['no'];
                    $arr[] = $row;
                    $str[] = $row['no'] . '导入成功';       
                 }
                 if(count($arr) == 1000){
                    $model->addAll($arr);
                    unset($arr);//释放给定的变量
                 }  
             }
             if(count($arr)>0){
                $model->addAll($arr);

             }
2.

.Thinkphp实现文件上传以及去除重复数据