[筆記] PHP匯出Excel可讀的CSV 並下載


將取出的資料會出CSV,並且儲存下來。
以下是重點三行
  1. $fp = fopen($filename,"w");
  2. fwrite($fp,$insert_row)
  3. fclose($fp);
實際範例
  1. function export_csv(){
  2. //指定匯出的資料夾
  3. $export_dir = 'C:\xampp\tmp\joan';
  4. //匯出時間
  5. $date_dir = date(Ymd);
  6. //檢查目錄是否存在
  7. if (is_dir($export_dir) === false)
  8. {
  9. //使用 exec 建立多層目錄, $output 不論成功與否, 都回傳empty,所以用 is_dir() 判斷是否建立成功
  10. exec("mkdir -p ".$export_dir, $output);
  11. //無法建立目錄時, 顯示錯誤訊息
  12. if(is_dir($export_dir))
  13. {
  14. throw new Exception('無法建立目錄');
  15. }
  16. }
  17. //跑之前, 先刪除該天的VSC資料與資料夾
  18. exec("rm -rf".$this->export_dir."/".$date_dir."*", $output);
  19. //檔名
  20. $filename = $export_dir.'/'.$date_dir.'.csv';
  21. if (!$fp = fopen($filename,"w"))
  22. {
  23. throw new Exception('建立CSV檔失敗');
  24. }
  25. //UTF-8 NO BON
  26. $insert_row = "\xEF\xBB\xBF";
  27. if (fwrite($fp,$insert_row) === false)
  28. {
  29. throw new Exception('建立CSV檔失敗');
  30. }
  31.  
  32. //標頭
  33. $insert_row = '"姓名","ID","性別"';
  34. $insert_row .= "\n";
  35. if (fwrite($fp,$insert_row) === false)
  36. {
  37. throw new Exception('建立CSV檔失敗');
  38. }
  39.  
  40. //給資料
  41. $main_data = ['name' => 'joan','id' => '00001','gender' =>'F'],['name' => 'Fifi','id' => '00002','gender' =>'F'];
  42. foreach($main_data as $sm)
  43. {
  44. //初始化
  45. $insert_row = "";
  46. $insert_row = '"'.$sm['name'].'"';
  47. $insert_row = '"'.$sm['id'].'"';
  48. $insert_row = '"'.$sm['gender'].'"';
  49. }
  50.  
  51. if (fwrite($fp,$insert_row) === false)
  52. {
  53. throw new Exception('建立CSV檔失敗');
  54. }
  55. fclose($fp);
  56. }
比較編碼問題,常見的兩種寫法
//註一
//fwrite($fp, iconv('UTF-8', 'BIG5'));
//註二
fwrite($fp, "\xEF\xBB\xBF");
說明:
註1,為原本使用方法,若遇到Big5中無相對應之字,則會發生內容遺失的情況。
註2,此為寫入BOM標籤,目的在使Excel能正確讀取UTF-8編碼。