“Как экспортировать другой следующий файл‘ после 2000 строк данных

#php

#php

Вопрос:

Я использую PHP для экспорта CSV-файла, это работает, но я экспортирую 2000 или более строк, как создать автоматический следующий CSV-файл.

Как переместить другой файл после 2000 строк?

 <?php
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename = records.csv');
echo $header = "Name";
echo  "rn";
$sql = mysql_query(“Select * from table”);
while ($getData = mysql_fetch_assoc($sql)) {
   echo '"'.$name.'"';
   echo  "rn";
}
exit;
?>
  

Комментарии:

1. что вы пробовали до сих пор?

2. Поставьте условие where. where id > 2000

3. Проверьте количество строк и разделите на 2000, если оно выше 2 тыс. поместите разделенный ответ в цикл, чтобы создать такое количество файлов

4. Вам следует рассмотреть возможность отказа от mysql_ API.

Ответ №1:

Вы можете использовать array_chunk функцию для сохранения записей 2000 и экспорта их в csv.

Например

 $rowData = [
    [1,2,3],
    [11,21,31],
    [21,22,32],
    [31,42,73],
    [111,222,333]
];
foreach(array_chunk($rowData, 2) as $key => $records){
   $file_name = 'export_data_'.$key.'.csv';
   writeToCsv($file_name,$records);
}
//funtion to export data to csv
function writeToCsv($fileName, $rowData){
    $fp = fopen($fileName, 'w');
    foreach ($rowData as $fields) {
        fputcsv($fp, $fields);
    }
   fclose($fp);
 }
  

В вашем случае используйте array_chunk($rowData, 2000)

Ответ №2:

 <?php
$rowLimit = 2000;
$fileIndex = 0;
$i = 1;
$handle = null;
$fileList = array();
$timestampFolder = strtotime("now").'/';
mkdir($timestampFolder);

$sql = mysql_query("Select * from table");
while ($getData = mysql_fetch_assoc($sql)) {

    if( ($i%$rowLimit) == 1) {
        $fileIndex =1;

        if(!is_null($handle)) {
            fclose($handle);
        }

        $fileName = "records".$fileIndex.".csv";
        $handle = fopen($timestampFolder.$fileName, "a");
        $fileList[] = $fileName;


    }

    fputcsv($handle, $getData);
    $i  ;
}

foreach($fileList as $file) {
    echo '<a href="'.$timestampFolder.$file.'">'.$file.'</a><br>';
}