php 导入csv格式

来源:互联网 发布:ubuntu添加软件源 编辑:程序博客网 时间:2024/05/16 11:26

导入csv格式。并根据内容判断是mac系统格式的CSV还是其它格式的CSV。


public function import_csv() {

        if ($this->page_params['no_permission']) {
            return;
        }


        ini_set("auto_detect_line_endings", true);
        ini_set('post_max_size', '30M');
        ini_set('upload_max_filesize', '20M');
        set_time_limit(0);
        //10240000 = 10M
        //var_dump($_FILES['file']['type']);
        if (!preg_match_all("/^.*_(20\d{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))-(20\d{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))_\d{10}\.csv/i", $_FILES['file']['name'])) {
            $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
            $this->page_params['errMsg'] = '文件上传错误!请检查文件是否是下载的标准表格!';
            $this->index();
            return;
        }


        preg_match("/^.*_(20\d{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))-(20\d{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))_\d{10}\.csv/i", $_FILES['file']['name'], $matches);
        $upload_date = substr($matches[1], 0, 4) . '-' . substr($matches[1], 4, 2) . '-' . substr($matches[1], 6, 2);


        if ($_FILES['file']['size'] < 10240000) {
            if ($_FILES["file"]["error"] > 0) {
                $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
                $this->page_params['errMsg'] = '文件上传错误,' . $_FILES["file"]["error"];
                $this->view_list();
            } else {
                $path = getcwd() . "/upload/data/" . date('Ymd') . '_' . urlencode($_FILES['file']['name']);
                move_uploaded_file($_FILES["file"]["tmp_name"], $path);
                if (file_exists($path)) {
                    //数据解析
                    if (($handle = fopen($path, "r")) !== FALSE) {
                        //$column是表示数据库与CSV对应
                        $column = array(
                            'project_id', //xxID
                            'project_name', //xx名称
                            //'product_type', //xx类型
                            //'product_name', //xx名称
                            'ad_id', //广告ID
                            'channel_id', //xx名称
                            //'link_type', //链接类型
                            'status', //状态
                            'exposure_num', //xx量
                            'click_num', //xx量
                            'click_rate', //xxxx率
                            //'attention_num', //xxxx量
                            //'install_num', //xx量
                            //'install_rate', //xxxxx率
                            'money_num', //xx(元)
                            'click_money_average', //xx均价(元)
                            //'install_money_average', //xx均价(元)
                            'bid_num', //xx(元)
                                //'download_num', //xx量
                                //'download_rate', //xx率
                                //'download_money_average', //xx均价(元)
                                //'activaty_num', //xx量
                                //'activaty_money_average', //xx均价(元)
                                //'activaty_rate', //xx率
                        );


                        $data = array();
                        $filter_row = 1;
                        $csv_row_num = 0;
                        $split_char = ','; //分隔符默认为逗号
                        //判断csv是用逗号还是分号分隔的
                        $line = fgets($handle);
                        $char1_array = explode(',', $line);
                        $char2_array = explode(';', $line);
                        if (count($char1_array) < count($char2_array)) {
                            $data_temp = $char2_array;
                            $split_char = ';';
                        } else {
                            $data_temp = $char1_array;
                        }
                        ++$csv_row_num;
                        if ($csv_row_num == $filter_row) {
                            $column_temp_1 = trim(iconv('gb2312', 'utf-8', $data_temp[0]));
                            $column_temp_2 = trim(iconv('gb2312', 'utf-8', $data_temp[1]));
                            if ($column_temp_1 != 'xxxxID' || $column_temp_2 != 'xx名称') {
                                $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
                                $this->page_params['errMsg'] = '上传的文件并不是媒介数据的CSV!';
                                $this->view_list();
                                return;
                            }
                        }
                        while (($data_temp = fgetcsv($handle, 0, $split_char)) !== FALSE) {
                            ++$csv_row_num;
                            if ($csv_row_num < $filter_row) {
                                continue;
                            }
                            if ($csv_row_num == $filter_row) {
                                $column_temp_1 = trim(iconv('gb2312', 'utf-8', $data_temp[0]));
                                $column_temp_2 = trim(iconv('gb2312', 'utf-8', $data_temp[1]));
                                if ($column_temp_1 != 'xxID' || $column_temp_2 != 'xxxx名称') {
                                    $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
                                    $this->page_params['errMsg'] = '上传的文件并不是媒介数据的CSV!';
                                    $this->view_list();
                                    return;
                                }
                                continue;
                            }
                            $row = array();
                            $row['upload_date'] = $upload_date;
                            $num = count($data_temp);
                            for ($i = 0; $i < $num; $i++) {
                                //排除$i=6和7的数据
                                switch ($i) {
//                                    case 6:
//                                    case 7:
//                                        break;
                                    case 4:
                                        break;
                                    default :
                                        $row[$column[$i]] = iconv('gb2312', 'utf-8', $data_temp[$i]);
                                        break;
                                }
                            }
                            $row['created_time'] = date('Y-m-d H:i:s');
                            $row['upload_file_name'] = $path;
                            $data[] = $row;
                        }
                        fclose($handle);
                    }
                    $len_result = count($data);
                    if ($len_result == 0) {
                        $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[2];
                        $this->page_params['errMsg'] = '没有导入任何数据!';
                        $this->view_list();
                        return;
                    }
                    $this->gf_channel_day_model->import_csv($data, $upload_date);
                    $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[2];
                    $this->page_params['errMsg'] = '导入成功!';
                    $this->view_list();
                } else {
                    $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
                    $this->page_params['errMsg'] = '文件上传失败!';
                    $this->view_list();
                }
            }
        } else {
            $this->page_params['show_error_msg_div'] = $this->show_error_msg_div_style[3];
            $this->page_params['errMsg'] = '文件大小错误,只能上传CSV格式且小于20M的文件!';
            $this->view_list();
        }
    }
0 0
原创粉丝点击