天天看點

PHP導出3w條資料成表格

親測有效,三萬條資料秒秒鐘導出

先進行資料表插入資料

ini_set('memory_limit','1024M'); //設定程式運作的記憶體
    ini_set('max_execution_time',0); //設定程式的執行時間,0為無上限
    ob_end_clean();  //清除記憶體
    ob_start();
        $in = 0;
        for($i=2880;$i<=30000; $i++) {
            $data = ['uname'=>'uname:'.$i, 'aname'=>'賬号:'.$i, 'pwd'=>'111'.$i];
            $r = DB::table('enroll_activity_admin')->insert($data);
             if($in==1000){ //每次寫入1000條資料清除記憶體
                    $in=0;
                    ob_flush();//清除記憶體
                   
                }
                $in++;
        }  
        ob_end_clean();die;
      

  在進行導出資料

$fileName = '酒店';
    $headArr = ['姓名', '賬号', '密碼']; //表頭,名稱可自定義
    $data = Db::table('enroll_activity_admin')->where('is_del','0')->field('uname,aname,pwd')->select();
    ini_set('memory_limit','1024M'); //設定程式運作的記憶體
    ini_set('max_execution_time',0); //設定程式的執行時間,0為無上限
    ob_end_clean();  //清除記憶體
    ob_start();
    header("Content-Type: text/csv");
    header("Content-Disposition:filename=".$fileName.'.csv');
    $fp=fopen('php://output','w');
    fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
    fputcsv($fp,$headArr);
    $index = 0;
    foreach ($data as $item) {
        if($index==1000){ //每次寫入1000條資料清除記憶體
            $index=0;
            ob_flush();//清除記憶體
            flush();
        }
        $index++;
        fputcsv($fp,$item);
    }
 
    ob_flush();
    flush();
    ob_end_clean();