2013-03-08 105 views
1

我創建了代碼的.csv導出文件:如何壓縮流csv文件PHP

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文件到壓縮文件並下載。如何做到這一點

+0

是不是'Content-type:text/csv'?另外,請查找PHP zip擴展。 – 2013-03-08 03:58:53

+0

http://www.php.net/manual/en/refs.compression.php – 2013-03-08 04:04:31

回答

3

你應該閱讀之前導出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); 
} 
+1

謝謝,但我想添加.csv文件而不在磁盤上創建臨時文件 – 2013-03-08 04:08:46

+0

您需要先讀取CSV文件並保存CSV數據文件到文件夾並讀取CSV文件名放入ZIP。 – 2013-03-08 04:11:23

+1

如何將CSV文件放入ZIP而不從磁盤讀取 – 2013-03-08 04:26:01