天天看點

php前後端分離導出excel問題

1、原始方案,直接浏覽器輸出下載下傳【卒】

$xlsWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//        ob_end_clean();//清除緩沖區,避免亂碼
//        header('Content-Type: application/vnd.ms-excel');
//        header('Content-Disposition: attachment;filename="訂單清單.xls"');
//$xlsWriter->save('test.xls');      

  

2、改成先存伺服器磁盤,定期删除,傳回url給前端

//建立當日日期檔案夾
        $dir = iconv("UTF-8", "GBK", "./uploads/".date("Ymd",time()));
        if (!file_exists($dir)){
            mkdir($dir,0777,true);
        };
//删除昨日日期檔案夾下.xlsx檔案
        $folderpath = './uploads/'.date("Ymd",strtotime("-1 day"));//要操作的目錄
        $this->deldir($folderpath);
        $title = date("His",time()).'.xls';
//将檔案上傳到檔案夾
        $xlsWriter->save($dir.'/'.$title); //表示在$path路徑下面生成.xlsx檔案
        $url = $_SERVER['SERVER_NAME'].'/uploads/'.date("Ymd",time()).'/'.$title;
        $data['url'] = $url;
        return resultArray(['data' => $data]);      
private function deldir($path){
    //如果是目錄則繼續
    if(is_dir($path)){
        //掃描一個檔案夾内的所有檔案夾和檔案并傳回數組
        $p = scandir($path);
        foreach($p as $val){
            //排除目錄中的.和..
            if($val !="." && $val !=".."){
                //如果是目錄則遞歸子目錄,繼續操作
                if(is_dir($path.$val)){
                    //子目錄中操作删除檔案夾和檔案
                    deldir($path.$val.'/');
                    //目錄清空後删除空檔案夾
                    @rmdir($path.$val.'/');
                }else{
                    //如果是.xlsx檔案直接删除
                    $result = glob($path.'/*.xlsx');
                    foreach($result as $file){
                        unlink($file);
                    }
                }
            }
        }
    }
}