美文网首页
PHP操作csv文件

PHP操作csv文件

作者: Mracale | 来源:发表于2020-08-18 08:19 被阅读0次
<?php
header("Content-type:text/html;charset=utf-8");
/**
  CSV文件是以纯文本形式存储的,一般以逗号为分隔符。
  这里主要简单介绍下如何导出CSV文件。
**/

//一、浏览器导出CSV文件格式
/**
 * 导出CSV文件
 */
function exportCsv(){
    // 需要导出的内容
    $data = [
        ['name' => '张三', 'score' => '80'],
        ['name' => '李四', 'score' => '90'],
        ['name' => '王五', 'score' => '60'],
    ];
    // 文件名,这里都要将utf-8编码转为gbk,要不可能出现乱码现象
    $filename = utfToGbk('导出csv文件.csv');

    // 拼接文件信息,这里注意两点
    // 1、字段与字段之间用逗号分隔开
    // 2、行与行之间需要换行符
    $fileData = utfToGbk('姓名, 分数') . "\n";
    foreach ($data as $value) {
        $temp = $value['name'] . ',' .
                $value['score'];
        $fileData .= utfToGbk($temp) . "\n";
    }

    // 头信息设置
    header("Content-type:text/csv");
    header("Content-Disposition:attachment;filename=" . $filename);
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
    echo $fileData;
    exit;
}

//二、在服务器生成CSV文件

/**
 * 下载CSV文件
 */
function downLoadCsv(){
    // 需要导出的内容
    $data = [
        ['name' => '张三', 'score' => '80'],
        ['name' => '李四', 'score' => '90'],
        ['name' => '王五', 'score' => '60'],
    ];
    // 文件名,这里都要将utf-8编码转为gbk,要不可能出现乱码现象
    $filename = utfToGbk('生成csv文件.csv');

    // 拼接文件信息,这里注意两点
    // 1、字段与字段之间用逗号分隔开
    // 2、行与行之间需要换行符
    $fileData = utfToGbk('姓名, 分数') . "\n";
    foreach ($data as $value) {
        $temp = $value['name'] . ',' .
            $value['score'];
        $fileData .= utfToGbk($temp) . "\n";
    }

    $filePath = __DIR__ . '/' . $filename;
    // 将一个字符串写入文件
    file_put_contents($filePath, $fileData);
    return $filePath;
}


/**
 * 字符转换(utf-8 => GBK)
 */
function utfToGbk($data)
{
    return iconv('utf-8', 'GBK', $data);
}
/**
 * 数组打印
 */
function p($data)
{
    echo '<pre>';
    print_r($data);
}

//csv文件数据导入到数据库

function import(){
    ini_set('memory_limit', '-1');  //PHP内存设置
    $handle=fopen("test.csv","r");
    $fileName="test.csv";
    //将文件一次性全部读出来
    $excelData = array();
    $content = trim(file_get_contents($fileName));
    $excelData = explode("\n",$content);

    $chunkData = array_chunk($excelData , 500); //批量插入500条数据
    $count = count($chunkData);
    for ($i = 0; $i < $count; $i++) {
        $insertRows = array();
        foreach($chunkData[$i] as $value){
            $string = mb_convert_encoding(trim(strip_tags($value)), 'utf-8', 'GBK');//转码
            $v = explode(',', trim($string));
            $v = str_replace("'", " ", $v);
            $v = str_replace(" ", "", $v);
            $sqlString       = '('."'".implode( "','", $v  ) . "'".')'; //批量
            $insertRows[]    = $sqlString;
        }
        p($insertRows);die;
    }
}

import();

/**
备注:
php导入csv文件碰到乱码问题的解决方法

问题一解决: 在windows上写代码的时候测试发生了乱码问题
    方法一:函数mb_convert_encoding();作如下设置 $str = mb_convert_encoding($str, "UTF-8", "GBK");然后就可以了。

    方法二:函数iconv();作如下设置iconv(‘GBK',”UTF-8//TRANSLIT//IGNORE”,$str);

    这两个函数来解决在windows上面发生乱码的问题。 

问题二解决: 提交到linux系统上的时候又发生了乱码
    php读取csv文件,在linux上出现中文读取不到的情况,解决办法 
    添加了一行代码setlocale(LC_ALL, 'zh_CN');

    PHP setlocale() 函数解释 
    setlocale() 函数设置地区信息(地域信息)。 
    地区信息是针对一个地理区域的语言、货币、时间以及其他信息。该函数返回当前的地区设置,若失败则返回 false。

问题三:如果导出的文件中包含 逗号
str_replace (',',',',str_replace(PHP_EOL,'',$val)) 
**/

?>

相关文章

网友评论

      本文标题:PHP操作csv文件

      本文链接:https://www.haomeiwen.com/subject/fdnwdktx.html