Как заархивировать поток файла CSV PHP
Я создал файл экспорта.csv с кодом:
header('Content-type: text.csv');
header('Content-Disposition: attachment; filename=filename.csv');
.....
$fp = fopen('php://output','w');
foreach ($rowsCsv as $rowCsv) {
fwrite($fp, $rowCsv);
}
fclose($fp);
Это работает нормально, но я хочу сжать CSV-файл в ZIP-файл и скачать его. Как это сделать
1 ответ
Вы должны прочитать файл CSV перед экспортом, или вам нужно только положить filename.csv
в файл:
$file_folder = "folder_you_stored/"; // change folder
$file = "filename.csv"; // your CSV filename from exported done
$zip = new ZipArchive();
$zip_name = "archiver.zip";
$string_data = 'dumped data of CSV';
$zip->addFile($file_folder.$file); // store a file OR below
$zip->addString("your_filename.csv", $string_data); // file store of string data
# download action
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$zip_name.'"');
header('Content-Length: ' . strlen($string_data));
readfile($zip_name);
unlink($zip_name);
Справочник по PHP.NET, как использовать ZIP-архив: http://php.net/manual/en/class.ziparchive.phpž
Поставить вместо addFile
добавить как строку в качестве примера:
$fp = fopen('php://output','w');
foreach ($rowsCsv as $rowCsv) {
$zip->addFromString('example.csv', $rowCsv);
}