php实现百万级数据快速导出CSV

//让程序一直运行
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(['name', 'age', 'email'])
        ->limit($nums)
        ->offset($i * $nums)
        ->asArray()
        ->all();
    foreach ($result as $item) {
        fputcsv($fp, $item);
    }
    //每1万条数据就刷新缓冲区
    ob_flush();
    flush();
}
exit;

npm2 使用

npm i pm2 -g

启动pm2(node进程守护)
进入到nuxt项目跟目录:使用pm2 start 命令启动项目并开启进程守护 
pm2 start npm --name geekdb -- run start

查看pm2里守护的node进程
pm2 list

pm2常用命令
0)查看:pm2中的项目pm2 list
1)启动项目:pm2 start xxx
2)删除pm2中启动的项目:pm2 delete xxx (xxx参数:pm2列表中的id,all)
3)停止pm2中启动的项目:pm2 stop xxx (xxx参数:pm2列表中的id,all)

#将pm2system.config.js的项目名改成对应的项目名,#然后上传到项目根目录
pm2 start dsshopsystem.config.js
#查看pm2列表中是否有刚才的进程
pm2 list
# 开机自动启动
pm2 save
pm2 startup

npm i导致了许多问题的解决

ERESOLVEnpm@7有关的问题很常见,因为npm7.x对某些事情比npm6.x更严格。通常,最简单的解决方法是将--legacy-peer-deps标志传递给npm(e.g.,npm i --legacy-peer-deps),或者使用npm@6

如果这不能立即起作用,也许可以先删除node_modulespackage-lock.json。它们将被重新创建。

(提示:使用npm@6不需要卸载npm@7。使用npx指定npm的版本。例如:npx -p npm@6 npm i --legacy-peer-deps。)