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


將取出的資料會出CSV,並且儲存下來。
以下是重點三行
$fp = fopen($filename,"w");
fwrite($fp,$insert_row)
fclose($fp);
實際範例
function export_csv(){
    //指定匯出的資料夾
    $export_dir = 'C:\xampp\tmp\joan';
    //匯出時間
    $date_dir = date(Ymd);
    //檢查目錄是否存在
    if (is_dir($export_dir) === false) 
    {
        //使用 exec 建立多層目錄, $output 不論成功與否, 都回傳empty,所以用 is_dir() 判斷是否建立成功
        exec("mkdir -p ".$export_dir, $output);
        //無法建立目錄時, 顯示錯誤訊息
        if(is_dir($export_dir))
        {
            throw new Exception('無法建立目錄');
        }
    }
    //跑之前, 先刪除該天的VSC資料與資料夾
    exec("rm -rf".$this->export_dir."/".$date_dir."*", $output);
    //檔名
    $filename = $export_dir.'/'.$date_dir.'.csv';
    if (!$fp = fopen($filename,"w"))
    {
        throw new Exception('建立CSV檔失敗');
    }
    //UTF-8 NO BON
    $insert_row = "\xEF\xBB\xBF";
    if (fwrite($fp,$insert_row) === false)
    {
        throw new Exception('建立CSV檔失敗');
    }

    //標頭
    $insert_row = '"姓名","ID","性別"';
    $insert_row .= "\n";
    if (fwrite($fp,$insert_row) === false)
    {
        throw new Exception('建立CSV檔失敗');
    }

    //給資料
    $main_data = ['name' => 'joan','id' => '00001','gender' =>'F'],['name' => 'Fifi','id' => '00002','gender' =>'F'];
    foreach($main_data as $sm)
    {
        //初始化
        $insert_row = "";
        $insert_row = '"'.$sm['name'].'"';
        $insert_row = '"'.$sm['id'].'"';
        $insert_row = '"'.$sm['gender'].'"';
    }

    if (fwrite($fp,$insert_row) === false)
    {
        throw new Exception('建立CSV檔失敗');
    }
    fclose($fp);
}
比較編碼問題,常見的兩種寫法
//註一
//fwrite($fp, iconv('UTF-8', 'BIG5'));
//註二
fwrite($fp, "\xEF\xBB\xBF");
說明:
註1,為原本使用方法,若遇到Big5中無相對應之字,則會發生內容遺失的情況。
註2,此為寫入BOM標籤,目的在使Excel能正確讀取UTF-8編碼。