[修订]解析CSV文件和保存CSV
1.
解析CSV文件:
/**
* 检查文件
*/
function isFileOK($file){
//判断文件大小
$size = $file['size']/1000000;//M,默认上限是2MB
if($size > 2) {
dumpErrorCode($GLOBALS['language']['goods_file_error_size']);
}
//判断文件类型
$allowed_types = array('csv');
$filename = $file['name'];
$ext = strtolower(end(explode('.', $filename)));
if(!in_array($ext,$allowed_types)){
dumpErrorCode($GLOBALS['language']['goods_file_error_extension']);
}
$this->targetFolder =
APPLICATION_ROOT.UPLOAD_PATH.$_SESSION['platform_code'].'/';
if(file_exists($this->targetFolder)){
$ret = true;
}else{
$ret = mkdir($this->targetFolder);
}
if(!$ret){
dumpErrorCode($GLOBALS['language']['goods_file_error_directory']);
}
$result = move_uploaded_file($file['tmp_name'], $this->targetFile);
if ($result) {
$count = file_put_contents($this->targetFile,
$this->trans2utf8($this->targetFile));
if (!$count) {
dumpErrorCode("
".$GLOBALS['language']['asset_error4']."");
}
}else {
dumpErrorCode($GLOBALS['language']['asset_upload_fail']);
}
$handle = fopen($this->targetFile, 'r');
if(!$handle){
dumpErrorCode($GLOBALS['language']['goods_file_error_open']);
}
return $handle;
}
$handle = $this->isFileOK($file);
Function test(){
$i = 0;
while(($row = fgetcsv($handle)) !== FALSE){
$i++;
//标
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
行为第一行,跳过,并把各列标题保存在一个数组中,根据标题名
得到相应的行号,从而获得数据
if($i==1){
//通过标题获取对应列的列号
$header = $row;
$taskid = array_search("任务编号",$header);
$taskname = array_search("任务名称",$header);
$tasktype = array_search("类型",$header);
continue;
}
$arr = array();
$arr[0] = $row[$taskid];
//插入数据库操作
...
}
}
12.保存CSV文件:
/**
* 导出csv文档
*/
function makecsv(){
$taskCsv = array(...);//数据数组
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: inline; filename=\"{$this->table}_tmp.csv\"");
$csvTitle = array(...);//标题数组
readfile($this->savecsv($csvTitle, $taskCsv));
}
/**
* 保存数据为csv.
* @param $column
* @param $rows
*/
function savecsv($column,$rows)
{
if(is_array($rows)){
$pathFile =
APPLICATION_ROOT.CREATE_PATH.$_SESSION['platform_code'].'/';
if(!file_exists($pathFile)){
mkdir($pathFile, 0777);
}
$pathFile .= $this->table.'_tmp.csv';
$handle = fopen($pathFile, 'w');
if($handle){
fwrite($handle, chr(0xEF).chr(0xBB).chr(0xBF));
fwrite($handle, implode(',', $column).PHP_EOL);//将标题通过,连
接
foreach($rows as $row){
fwrite($handle, implode(',', $row).PHP_EOL);//将数据通过,连
接,然后写入csv文件
}
fclose($handle);
return $pathFile;
}else{
return false;
}
}else{
return false;
}