>백엔드 개발 >PHP 튜토리얼 >PHP로 대량의 데이터를 내보내는 방법

PHP로 대량의 데이터를 내보내는 방법

不言
不言원래의
2018-07-19 16:35:268206검색

PHP 개발 과정에서 때로는 내보내야 할 데이터가 있습니다. 다양한 프레임워크의 일부 패키지를 사용하여 데이터를 직접 얻은 다음 해당 처리 방법에 넣을 수 있습니다. 내보내야 하는 데이터를 얻으려면 다른 방법을 사용해야 합니다.

일반적으로 빅 데이터를 처리하는 방법에는 여러 가지가 있습니다. 이벤트 트리거 스크립트를 추가하거나 수정하여 데이터를 생성하고, 예약된 작업 스크립트를 실행하여 데이터를 생성하고, phpexcel을 사용하여 대량의 데이터를 직접 내보내고, fputcsv 실시간 데이터 스트리밍을 사용합니다. 쓰다. 그림을 사용하여 다음과 같이 표현합니다.

PHP로 대량의 데이터를 내보내는 방법

여기에서는 주로 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(&#39;GBK&#39;, &#39;UTF-8&#39;, $rowData);
                fputcsv($fp, $rowData);
            }            //释放变量的内存
            unset($db_data);            //刷新输出缓冲到浏览器
            ob_flush();            //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
            flush();
        }

        fclose($fp);        
        exit();
    }

이렇게 하면 다운로드한 파일 생성과 쓰기가 동시에 이루어지므로 처리 속도가 향상됩니다.
이전에 사용된 패키지 처리는 25M 데이터를 생성하고 20분 정도 걸렸습니다. 이 처리 방법은 1분 이상 소요됩니다(실제 처리 환경과도 관련 있음).

관련 권장 사항:

PHP csv 대용량 데이터 내보내기 분할 처리

php mysql로 ​​대량의 데이터 가져오기(예)

위 내용은 PHP로 대량의 데이터를 내보내는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.