PHP + Ajax处理大数据查询并导出Excel
思路:使用ajax多次请求服务器,分段生成多个Excel,然后打包压缩成zip,超链接指向下载的文件然后下载。
【HTML部分】
<input type="button" value="确定导出" onclick="export()"> <a style="display: none" id="export_success" href="/uploads/excel.zip">导出成功,点击下载Excel</a>
【JS部分】
function export(){ if(!confirm('导出时间较长,请耐心等待,导出成功前请勿刷新页面!是否继续?')){ return false; } ajaxGetExportData(1); var res = 0; $.ajax({ type: "GET", async: false, url: "/download_zip.php", success:function(data){ res = data; } }); if(res == 0){ alert('导出失败'); }else{ $("#export_success").show(); } } function ajaxGetExportData(page){ var res = 0; $.ajax({ type: "GET", async: false, url: "/export.php?page="+page, success:function(data){ res = data; } }); if(res == 1){ page++; ajaxGetExportData(page); } return true; }
【PHP部分】
export.php
$page = $_GET['page']; if($page <= 3){ $file_path = 'uploads/excel'; if (!file_exists($file_path)) { @mkdir($file_path,0777,true); } $file_name = $file_path . '/' . $page . '.txt'; file_put_contents($file_name,'123'); echo 1; }else{ echo 0; }
download_zip.php
$file_path = BASEPATH . '../uploads/excel'; $zip_name = BASEPATH . '../uploads/excel.zip'; @unlink($zip_name); // 加载zip类 $this->load->library('MakeZip'); $res = new MakeZip($file_path,$zip_name); if($res){ echo 1; }else{ echo 0; } exit;
最后一步:生成zip文件,参考:https://www.cnblogs.com/kccdzz/p/10273674.html