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

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实现文件上传以及去除重复数据_第1张图片

 
 

你可能感兴趣的:(Thinkphp实现文件上传以及去除重复数据)