我正在构建一个在线应用程序,从多个(不相关的)数据集中选择变量,并为已选择的每个数据集构建输出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 ..
答案 0 :(得分:1)
您不能一次向用户流式传输多个文件。你应该生成每个csv文件,写入磁盘然后创建一个存档(tar,zip等)并将它们发送给它们。