PHP 개발 과정에서 때로는 내보내야 할 데이터가 있습니다. 다양한 프레임워크의 일부 패키지를 사용하여 데이터를 직접 얻은 다음 해당 처리 방법에 넣을 수 있습니다. 내보내야 하는 데이터를 얻으려면 다른 방법을 사용해야 합니다.
일반적으로 빅 데이터를 처리하는 방법에는 여러 가지가 있습니다. 이벤트 트리거 스크립트를 추가하거나 수정하여 데이터를 생성하고, 예약된 작업 스크립트를 실행하여 데이터를 생성하고, phpexcel을 사용하여 대량의 데이터를 직접 내보내고, fputcsv 실시간 데이터 스트리밍을 사용합니다. 쓰다. 그림을 사용하여 다음과 같이 표현합니다.
여기에서는 주로 fputcsv를 사용하여 데이터를 내보내는 방법을 기록합니다.
public function exportData() { set_time_limit(0); ini_set('memory_limit', '1024M'); $columns = [ '列名1', '列名2', '列名3' //需要几列,定义好列名 ]; //设置好告诉浏览器要下载excel文件的headers header('Content-Description: File Transfer'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="导出数据-'.date('Y-m-d', time()).'.csv"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); $fp = fopen('php://output', 'a');//打开output流 mb_convert_variables('GBK', 'UTF-8', $columns); fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中 //添加查询条件,获取需要的数据 $query = Model::class()->where(); //获取总数,分页循环处理 $accessNum = $query->count(); $perSize = 1000; $pages = ceil($accessNum / $perSize); for($i = 1; $i <= $pages; $i++) { $db_data = $query->limit($perSize)->offset(($i-1)*$perSize)->get(); foreach($db_data as $key => $value) { $rowData = []; //获取每列数据,转换处理成需要导出的数据 //需要格式转换,否则会乱码 mb_convert_variables('GBK', 'UTF-8', $rowData); fputcsv($fp, $rowData); } //释放变量的内存 unset($db_data); //刷新输出缓冲到浏览器 ob_flush(); //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 flush(); } fclose($fp); exit(); }
이렇게 하면 다운로드한 파일 생성과 쓰기가 동시에 이루어지므로 처리 속도가 향상됩니다.
이전에 사용된 패키지 처리는 25M 데이터를 생성하고 20분 정도 걸렸습니다. 이 처리 방법은 1분 이상 소요됩니다(실제 처리 환경과도 관련 있음).
관련 권장 사항:
위 내용은 PHP로 대량의 데이터를 내보내는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!