Maison >développement back-end >tutoriel php >Parlons de la façon d'écrire des millions de données en CSV en PHP

Parlons de la façon d'écrire des millions de données en CSV en PHP

藏色散人
藏色散人avant
2022-12-30 16:13:444534parcourir

Cet article vous apporte des connaissances pertinentes sur PHP+csv. Il présente principalement comment écrire des millions de données en CSV via des fichiers de script en PHP. Voyons comment y parvenir. J'espère que cela sera utile à tout le monde.

Parlons de la façon d'écrire des millions de données en CSV en PHP

Exigences :

Des millions de données écrites au format CSV.

Framework :

N L'ancien framework d'il y a de nombreuses années n'est plus disponible sur Baidu, donc la méthode d'écriture est plus proche de l'original

Analyse :

La quantité de données est trop importante et le Le navigateur ne peut pas être utilisé pour demander l'écriture sur le téléchargement CSV, alors écrivez un script qui appelle

pseudo-code :

//xxx - 根据自己项目替换
//调取脚本文件
exec(xxx);

//脚本文件
//设置执行时间和内存
set_time_limit(0);
ini_set('memory_limit', '128M');
//循环获取
$id = 0;
$data = 'xxx'.'\n';//表头
while(true){
    //SQL
    $list = xxx WHERE id > $id ORDER BY id ASC LIMIT 10000; //每次取1w防止数据库压力大,根据sql来,我这个有联表,
    if(empty($list)){
        break;
    }
    foreach($list as $row){
        $data .= '"' . $row['xxx'] . '",';
        $data .= "\n";
        $id = $row['id'];//更新最大id
    }
    //追加写入csv
    file_put_contents('xxx', mb_convert_encoding($data, 'gbk'),FILE_APPEND);
    unset($data);//基础不好不确定初始化能不能清内存就先unset了
    $data = '';//初始化
}

consiste essentiellement à écrire par lots. Lorsque j'ai commencé les tests, j'avais prévu de ne pas écrire file_put_contents dans la boucle. a constaté que lorsque la quantité de données était importante, des centaines de milliers de données dépassent la mémoire de $data. De plus, si les données dépassent un million, vous devez les exporter dans des fichiers séparés. Excel ne prend pas en charge l'ouverture de plus de 1048576 lignes. . Théoriquement, vous pouvez ajouter un paramètre $all_count pour compter le nombre total de requêtes en cours. S'il dépasse un million, ajoutez de nouveaux fichiers.

S'il existe une meilleure méthode ou une meilleure optimisation du code, veuillez en discuter.

Apprentissage recommandé : "Tutoriel vidéo PHP"

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer