我想从我的数据库使用内置的PHP函数fputcsv()
下载简单的CSV文件。尝试下载从我的数据库创建的CSV文件时出错
这里是我的功能:
/**
* downloads class logs in csv format
*/
public function ajaxDownloadTeachersClassLogs()
{
// ...code to get data from the database...
$classes = $query->result();
// download file
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
// write data to file
$output = fopen("php://output", "w");
foreach ($classes as $class) {
fputcsv($output, $class);
}
// change delimiter/enclosure
fclose($output);
}
我知道,我的数据库查询是正确的,因为当我var_dump($classes);
我得到以下结果:
array(1) {
[0]=>
object(stdClass)#26 (10) {
["token"]=>
string(5) "9DFCF"
["teacher_name"]=>
string(17) "James Dean"
["teacher_id"]=>
string(1) "2"
["student_name"]=>
string(11) "Juan Santos"
["student_id"]=>
string(2) "26"
["class_number"]=>
string(3) "1/1"
["started"]=>
string(10) "1488279490"
["duration"]=>
string(4) "1200"
["invite_email"]=>
string(0) ""
["status"]=>
string(0) ""
}
}
当我跑我得到函数如下错误:
如果我点击确定,下载失败。
为什么我的下载失败?
编辑:
它看起来像我的问题是与内容编码错误我这是在我所用的框架错误配置套管做...
以下作品的代码:
$this->db->order_by('started');
$query = $this->db->get('classes');
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=data.csv;');
$flag = false;
$output = fopen('php://output', 'w');
foreach ($query->result_array() as $row) {
if ($flag === false) {
fputcsv($output, array_keys($row), ',');
}
fputcsv($output, array_values($row), ',');
}
die;
你可以这样使用。 $ fp = fopen('file.csv','w'); fputcsv($ fp,$ data); –