php利用缓冲实现动态输出(ob_flush)
下面以PHP导出上万条数据为例,上代码:
// 导出测试
function explode() {
ob_end_clean();
header("Content-type:text/csv");
header('Content-Disposition: attachment;filename=test_' . time() . '.csv');
$fp = fopen('php://output', 'a');
// 输出Excel列头信息
$head = array('平台', '名称', '本金','时间');
// foreach($head as $i => $v) {
// // CSV的Excel支持GBK编码,一定要转换,否则乱码
// $head[$i] = iconv('utf-8', 'GB2312//IGNORE', $v);
// }
fputcsv($fp, $head);
$limit = 1000;
$count = 1;
$sql = 'select * from assets limit 0,1000';
$rows = Db::table('表名')->query($sql);
while(count($rows)>0 && $count<21) {
$offset = $count*$limit;
$count++;
foreach ($rows as $key => $row) {
if($key%2000 == 0) {
if(ob_get_level()>0){
ob_flush() ;
}
}
$val = array($row['platform'],$row['name'],$row['principal'],$row['create_time']);
// foreach($val as $k => $v) {
// $val[$k] = iconv('utf-8', 'GB2312//IGNORE', $v);
// }
fputcsv($fp, $val);
}
$sql = "select * from assets limit {$offset},{$limit}";
$rows = Db::table('表名')->query($sql);
}
}