Im Prozess der PHP-Entwicklung müssen manchmal Daten exportiert werden. Sie können jedoch einige Pakete in verschiedenen Frameworks verwenden, um die Daten direkt abzurufen und sie dann in die entsprechende Verarbeitungsmethode zu übertragen der Daten, die exportiert werden müssen, müssen wir zu diesem Zeitpunkt andere Methoden verwenden, um dies zu erreichen.
Im Allgemeinen gibt es mehrere Lösungen für den Umgang mit großen Datenmengen: Generieren Sie Daten durch Hinzufügen oder Ändern von Ereignisauslöserskripten; verwenden Sie phpexcel, um große Datenmengen zu exportieren; Zeitdatenfluss zum Schreiben. Verwenden Sie ein Bild, um es wie folgt darzustellen:
Hier erfassen wir hauptsächlich die Verwendung von fputcsv zum Exportieren von Daten.
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('GBK', 'UTF-8', $rowData); fputcsv($fp, $rowData); } //释放变量的内存 unset($db_data); //刷新输出缓冲到浏览器 ob_flush(); //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 flush(); } fclose($fp); exit(); }
Dadurch wird die heruntergeladene Datei gleichzeitig generiert und geschrieben, wodurch die Verarbeitungsgeschwindigkeit verbessert wird.
Die zuvor verwendete Paketverarbeitung generierte 25 Millionen Daten und dauerte 20 Minuten. Diese Verarbeitungsmethode dauert mehr als 1 Minute (auch abhängig von der tatsächlichen Verarbeitungsumgebung).
Verwandte Empfehlungen:
PHP CSV große Datenmengen exportieren, geteilte Verarbeitung
PHP importiert große Datenmengen nach MySQL (Beispiel)
Das obige ist der detaillierte Inhalt vonSo exportieren Sie große Datenmengen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!