Maison  >  Article  >  développement back-end  >  Comment exporter de grandes quantités de données en php

Comment exporter de grandes quantités de données en php

不言
不言original
2018-07-19 16:35:267985parcourir

Dans le processus de développement PHP, certaines données doivent parfois être exportées. Vous pouvez utiliser certains packages dans divers frameworks pour obtenir directement les données, puis les jeter dans la méthode de traitement correspondante. Cependant, lorsque vous en rencontrez une grande quantité. de données qui doivent être exportées, à ce moment-là, nous devons utiliser d'autres méthodes pour y parvenir.

Généralement, il existe plusieurs solutions pour gérer le Big Data : générer des données en ajoutant ou en modifiant des scripts de déclenchement d'événements ; générer des données en exécutant des scripts de tâches planifiées ; utiliser directement phpexcel pour exporter de grandes quantités de données ; temps de flux de données à écrire. Utilisez une image pour le représenter comme suit :

Comment exporter de grandes quantités de données en php

Ici, nous enregistrons principalement l'utilisation de fputcsv pour exporter des données.

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();
    }

Cela générera et écrira le fichier téléchargé en même temps, améliorant ainsi la vitesse de traitement.
Le traitement du package utilisé auparavant a généré 25 millions de données et a pris 20 minutes. Cette méthode de traitement prend plus d'une minute (également liée à l'environnement de traitement réel).

Recommandations associées :

PHP csv grande quantité de données exportées, traitement fractionné

php importer une grande quantité de données vers MySQL (exemple)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn