cakephp生成(导出)多个csv文件

时间:2013-06-25 10:25:10

标签: cakephp csv export

我正在构建一个在线应用程序,从多个(不相关的)数据集中选择变量,并为已选择的每个数据集构建输出csv文件(仅包含所选变量,而不是所有可用变量)。

几乎工作,除了我最终只有一个csv文件,它只包含最后一个选定数据集的变量。

我正在尝试使用$ this->设置通过循环选定数据集的数组(正确嵌套以便于使用foreach循环)将数据传递到输出ctp视图。我可以得到它为什么我最终只有一个csv,但有没有人有任何想法如何在cakephp中正确实现?

这是用于生成csv文件的ctp视图..它适用于一个数据集。

<?php 

ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large

//create a file
$filename = "export_".date("Y.m.d").".csv";
$csv_file = fopen('php://output', 'w');

header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
//loop through data array passed by $this->set in controller
 foreach ($end_values as $row) 
 { 
    fputcsv($csv_file,$row,',','"');
}

fclose($csv_file);
?>

我更改了$ filename以包含对单个数据集的引用(现在只使用会话变量) - 因此对于每个传递,文件名将是不同的:

$filename = "export_".$this->Session->read('dataset_tag')."_".date("Y.m.d").".csv";

但仍然遇到同样的问题 - 只创建了最终的数据集csv ..

1 个答案:

答案 0 :(得分:1)

您不能一次向用户流式传输多个文件。你应该生成每个csv文件,写入磁盘然后创建一个存档(tar,zip等)并将它们发送给它们。