php csv txt 檔案匯入匯出相關筆記

2015-12-23

CSV匯出:

    $file_name = "文件前墜_".time().".csv";
    $ftpa = "存取實體路徑".$file_name;
    
   //先在server上建立文件 
   if(!(file_exists($ftpa))) {
         $file=fopen($ftpa,"a");
   }
    
   //檢查文件是否建立成功,式的話就可以進行匯出了
    if(file_exists($ftpa)) {
        if($file=fopen($ftpa,"w")) {

            //建立標頭
            fputs($file,"xEFxBBxBF"); //bom
            fputs($file,"標題,標題,標題 "); //第一行是標題,用逗號隔開

            //從資料庫讀資料
            $str="select * from 表格"; //select query
            $result=mysql_query($str);
            while($arr=mysql_fetch_array($result))
            {
               //輸出的時候每個值用逗號分開,然後結束後斷行
               $outdata =  """.preg_replace( "/ | /", "", $arr['欄位'])."",".
                                 """.preg_replace( "/ | /", "", $arr['欄位'])."",".
                                 """.preg_replace( "/ | /", "", $arr['欄位'])."",".
                                 """.$arr['欄位']."" ";

                fputs($file, $outdata);
            }
            //關閉文件
            fclose($file);

            //儲存在server上做備份後,接下來進行client端下載
            $getFile = $ftpa;
            header('Content-type: text/csv; charset=utf-8');
            header('Content-Disposition: attachment; filename="'.$file_name.'"');
            header("Pragma: no-cache");
            header("Expires: 0");
            readfile($getFile);
            //unlink($getFile); //若不需要在server上留備份就執行這一段
            exit();
        }
    }

CSV匯入:

//先檢查是否有要匯入的檔案且檔案為csv格式
if(isset($_FILES['inputfile']) && strrchr($_FILES['inputfile']['name'],".") == ".csv") {
   $inputfile = $_FILES['inputfile']['tmp_name']; //取得匯入的csv檔案
  $fp = fopen($inputfile, "r");
   
  //透過fgetcsv函式可以很完整的切割字串
  $row = 0; //計算行列
  while ( $list = fgetcsv($fp, $CSVfile_size) ) {
       //檢查看看是否字串為空,若不是空的就執行匯入query
       if ( strlen($list[0]) && $row > 0) {
          if ( strlen($temp_SQL) ) $temp_SQL .= ", "; //執行一次性query的組合,每組值用逗號連接
         //每個值都用mb_convert_encodeing來處理,可以排除中文字串問題
         $temp_SQL .= "('" . mb_convert_encoding($list[0], "UTF-8", "BIG-5") . "', 
               '" . mb_convert_encoding($list[1], "UTF-8", "BIG-5") . "', 
               '" . mb_convert_encoding($list[16], "UTF-8", "BIG-5") . "') ";
      } 
      $row++; //行列加1
     }
  fclose($fp);//關閉csv檔案

   //建立query
  $qury = "INSERT INTO users (欄位,欄位,欄位) VALUES " . $temp_SQL;
     mysql_query($qury);
   
  //輸出成功訊息
  if ($res){
   echo "";
  }
}

關於MYSQL query會遇到( ' )及( " )符號的問題, 解決方式如下

//將字串中的 (') 改寫為 (''), 如果sql query是用 (") 來做字串
function escapeQuote($str){
    $result = str_replace("'","''",$str);
    return $result;

關於編碼問題
mb_convert_encoding($file, "UTF-8", 'Unicode'); //將unicode轉為utf8
mb_convert_encoding($file, "UTF-8", 'BIG-5'); //將big5轉utf8
mb_detect_encoding($file, "UTF-8, Unicode, BIG-5"); //偵測看看目前編碼是什麼, 有match到就回參數二的字串,沒有就回應false

TXT匯入
$file= file_get_contents($_FILES['inputfile']['tmp_name']);

$line = explode(" ",$file);
$n = count($line);

for($i=1;$i<$n;$i++){
            $list = explode(" ",$line[$i]);

}

Contact

Github

Codepen

歡迎參觀我的賣場
© 2013 Copyright Digishot Web | Design Tools
Visitors【630403】
digishot webdesign studio