我正在为我的公司构建搜索功能,作为其中的一部分,管理团队可以使用我制作的搜索表单生成搜索,这是一个将各种术语发送到控制器方法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
函数的一部分,但每次执行搜索时都会下载它,任何指向正确的指针都会很棒。
答案 0 :(得分:1)
最佳解决方案将是PHPExcel库,所以不要通过修补来解决这个问题;)
答案 1 :(得分:0)
好的,所以我解决了这个问题,可能有更好的方法,但是接下来我做了什么:
在控制器中:
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');
/* ....... */
}
这个问题是如果我多次下载它,我会在flash文件被清除时在CSV文件中出现PHP错误
如果有人有更好的解决方案我会全力以赴。干杯
/ *编辑* /
为避免任何错误,我在export_to_csv
函数的末尾重置了flashdata,如下所示:
// Reset the results in flash data
$this->session->set_flashdata('results', $results);
同样,不是好的做法,但现在解决了我的问题:)