导入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();
}
}