#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>';
}