【问题标题】:cakephp generating (exporting) multiple csv filescakephp 生成(导出)多个 csv 文件
【发布时间】:2013-06-22 02:30:09
【问题描述】:

我正在构建一个在线应用程序,以从多个(不相关的)数据集中选择变量,并为每个已选择的数据集构建输出 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..

【问题讨论】:

    标签: cakephp csv export


    【解决方案1】:

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

    【讨论】:

    • 嗨 - 感谢您输入 dogmatic69。我可以澄清一下吗?我的控制器操作一次将一组数据发送到 ctp 视图。这个视图最后有 fclose 方法,所以它应该在第二批发送到视图之前关闭第一个 csv。我什至尝试通过在文件名中添加数据集 id 标记来强制文件名每次都略有不同。这可能与以下事实有关第二批数据已经到了吗?
    • 我不明白为什么 cakephp 框架要阻止某人一次创建多个 csv 输出...这可能反映了我的普遍无知!
    • 与 CakePHP 无关。您应该阅读 HTTP 的工作原理。
    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2011-07-14
    • 2018-05-13
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多