【问题标题】:Download to CSV in codeigniter在 codeigniter 中下载到 CSV
【发布时间】:2017-12-19 15:48:55
【问题描述】:

我正在为我的公司构建一个搜索功能,作为其中的一部分,管理团队可以使用我制作的搜索表单生成搜索,这是一个将各种术语发送到控制器方法 execute_search 的视图,这个通过我的Search_model 从数据库中获取结果并将它们输出到视图中。作为其中的一部分,我有一个“下载”按钮,我想将结果导出到 CSV。我做了一个控制器功能:

function convert_to_csv($results)
{

    /** open raw memory as file, no need for temp files */
    $temp_memory = fopen('php://memory', 'w');
    /** loop through array  */
    foreach ($results as $line) {
        /** default php csv handler **/
        fputcsv($temp_memory, $line);
    }
    /** rewrind the "file" with the csv lines **/
    fseek($temp_memory, 0);
    /** modify header to be downloadable csv file **/
    header('Content-Type: application/csv');
    header('Content-Disposition: attachement; filename="Statistics_system_report.csv";');
    /** Send file to browser for download */
    fpassthru($temp_memory);
}

我在下载的 CSV 文件中遇到错误,指出 $results 未定义。

我的问题是将结果发送到此函数但仅在我的用户单击下载按钮时才执行该函数的最佳方式是什么?我试过这个: $this->convert_to_csv($results); 作为我的execute_search 函数的一部分,但是每次执行搜索时都会下载它,任何指向正确方向的指针都会很棒。

【问题讨论】:

  • 在你调用方法之前你检查过$result是什么,即这个调用$this->convert_to_csv($results);
  • 是的,它是来自模型的多维数组 $query->get()->result_array();

标签: php codeigniter csv


【解决方案1】:

最佳解决方案将是 PHPExcel 库,因此不要通过修补来解决此问题;)

【讨论】:

  • 感谢您的建议,我会研究这个库,因为它可能是一个有用的资源;)
【解决方案2】:

好的,所以我解决了这个问题,可能有更好的方法,但这是我所做的:

在控制器中:

public function __construct()
{
    parent::__construct();
    $this->load->library('session'); // Load sessions
    /* ..... */
}

然后在我的 execute_search 函数中设置 flashdata:

$this->session->set_flashdata('results', $results);

然后在我的导出函数中:

function convert_to_csv()
{
    /** retrieve the search results */
    $results = $this->session->flashdata('results');
    /* ....... */
}

问题在于,如果我多次下载它,我会在 CSV 文件中出现 PHP 错误,因为 flashdata 已被清除

如果有人有更好的解决方案,我会全力以赴。干杯

/* 编辑 */ 为了避免任何错误,我在 export_to_csv 函数的末尾重置了 flashdata,如下所示:

 // Reset the results in flash data
 $this->session->set_flashdata('results', $results);

同样,这不是好的做法,但现在解决了我的问题 :)

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2014-10-15
    • 2022-01-09
    • 2012-08-09
    • 2016-12-28
    相关资源
    最近更新 更多