Maison > développement back-end > Problème PHP > Comment exporter rapidement des millions de données au format CSV en PHP

Comment exporter rapidement des millions de données au format CSV en PHP

醉折花枝作酒筹
Libérer: 2023-03-10 22:42:02
avant
3049 Les gens l'ont consulté

En PHP, vous pouvez utiliser le cache du serveur pour exporter rapidement du CSV avec des millions de données. Aujourd'hui, je vais vous apprendre à exporter rapidement du CSV. Vous pouvez vous y référer si vous en avez besoin.

Comment exporter rapidement des millions de données au format CSV en PHP

php implémente l'exportation de données au niveau d'un million. Le cache du serveur est utilisé pour y parvenir

Implémentation :

1 : Créer un. table de test, Et ajouter des données de test

1 : Créer une table de test

Ici j'ai créé une table de test, les champs sont : id, nom, âge, email

2 : Ajouter des données de test

(1) Ajoutez d'abord manuellement plusieurs lignes de données à la table

Ensuite, exécutez la commande suivante pour ajouter des données par lots

INSERT INTO test (name,age,email) SELECT name,age,email FROM test;
Copier après la connexion

Exécutez la commande ci-dessus plusieurs fois pour tester les données sera une augmentation exponentielle, de sorte que vous puissiez obtenir beaucoup de données de test

Deux : PHP implémente l'exportation de millions de données (ma commande de requête voici la commande de requête fournie avec le framework Yii )

//让程序一直运行
set_time_limit(0);
//设置程序运行内存
ini_set('memory_limit', '128M');
//导出文件名
$fileName = '测试导出数据';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
//打开php标准输出流
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
//添加导出标题
fputcsv($fp, ['姓名', '岁数', '邮箱']);
$nums = 10000; //每次导出数量
$count = Test::find()->count();
$step = ceil($count/$nums);//循环次数
for($i = 0; $i < $step; $i++) {
    $result = Test::find()
        ->select([&#39;name&#39;, &#39;age&#39;, &#39;email&#39;])
        ->limit($nums)
        ->offset($i * $nums)
        ->asArray()
        ->all();
    foreach ($result as $item) {
        fputcsv($fp, $item);
    }
    //每1万条数据就刷新缓冲区
    ob_flush();
    flush();
}
exit;
Copier après la connexion

Test comme ci-dessus Plus tard, vous constaterez qu'il ne faut qu'une dizaine de secondes pour exporter environ un million de données, ce qui est assez efficace

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal