0

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

几乎可以正常工作,只是我最终只有一个 csv 文件,并且它只包含最后一个选定数据集的变量。

我正在尝试使用 $this->set 通过循环遍历所选数据集的数组(正确嵌套以允许轻松使用 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..

4

1 回答 1

1

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

于 2013-06-25T12:24:46.387 回答