如何压缩流csv文件php

Posted

技术标签:

【中文标题】如何压缩流csv文件php【英文标题】:how to zip stream csv file php 【发布时间】:2013-03-08 03:56:02 【问题描述】:

我用代码创建了一个 .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 文件并下载它。怎么做的

【问题讨论】:

不是Content-type: text/csv吗?另外,寻找 PHP zip 扩展。 php.net/manual/en/refs.compression.php 【参考方案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);

【讨论】:

谢谢,但我想添加 .csv 文件而不在磁盘上创建临时文件 您需要首先 CSV 文件读取数据并将 CSV 文件保存到文件夹并读取 CSV 文件名以放入 ZIP。 我已经更新了答案。您需要将所有字符串数据放入字符串 addString('file.csv', 'your csv strings data read or outputed for CSV');

以上是关于如何压缩流csv文件php的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用pandas附加到压缩流吗?

我可以用熊猫附加到压缩流吗?

从 MS Excel 生成的 php CSV 导入

如何使用播放框架压缩 CSV 文件?

win7如何使用zip命令压缩一个csv。

如何将压缩(gz)CSV文件读入dask Dataframe?