我正在尝试通过CSV导出导出大量数据。它的数据量非常大,大约有100.000条记录和计数。
我的客户端通常使用两个选项卡同时浏览和检查多个内容。因此,要求是在进行导出时,他可以继续浏览系统。
问题是,当在服务器上生成CSV时,会话被阻止,在生成完成之前无法加载其他页面。
这就是我正在做的事情:
在整个过程中,无法在另一个标签页中导航该网站。
代码块:
$temp = 1;
$first = true;
$fileName = 'csv_data_' . date("Y-m-d") . '-' . time() . '.csv';
$filePath = CSV_EXPORT_PATH . $fileName;
// create CSV file
$fp = fopen($filePath, 'a');
// get data
for ($i = 1; $i <= $temp; $i++) {
// get lines
$data = $oPB->getData(ROWS_PER_CYCLE, $i); // ROWS_PER_CYCLE = 5000
// if something is empty, exit
if (empty($data)) {
break;
}
// write the data that will be exported into a file
fwrite($fp, $export->arrayToCsv($data, '', '', $first));
// count element
$temp = ceil($data[0]->foundRows / ROWS_PER_CYCLE); // foundRows is always the same value, doesn't change per query.
$first = false; // hide header for next rows
// free memory
unset($lines);
}
// close file
fclose($fp);
/**
* Begin Download
*/
$export->csvDownload($filePath); // set headers
一些注意事项:
有谁知道如何改善这一点?或任何其他解决方案。
感谢阅读。
答案 0 :(得分:0)
我的回答只是因为它对其他人有帮助。一位同事想出了解决这个问题的方法。
在
之前调用 session_write_close() 功能$temp = 1;
执行此操作,您将结束当前会话并存储会话数据,因此我可以在其他选项卡中继续导航该文件。
我希望它有所帮助。
关于此解决方案的一些注意事项: