Php 从Codeigniter导出CSV文件

Php 从Codeigniter导出CSV文件,php,mysql,codeigniter,csv,Php,Mysql,Codeigniter,Csv,我正在helpers中使用csv_helper.php文件进行导出。它正在从mysql获取结果,但只显示结果,而不是下载! 这是csv\u助手 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); if ( ! function_exists('array_to_csv')) { function array_to_csv($array, $download = "") {

我正在helpers中使用csv_helper.php文件进行导出。它正在从mysql获取结果,但只显示结果,而不是下载! 这是csv\u助手

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('array_to_csv'))
{
    function array_to_csv($array, $download = "")
    {
        if ($download != "")
        {   
            header('Content-Type: application/csv');
            header('Content-Disposition: attachment; filename="' . $download . '"');
        }       
        ob_start();
        $f = fopen('php://output', 'w') or show_error("Can't open php://output");
        $n = 0;     
        foreach ($array as $line)
        {
            $n++;
            if ( ! fputcsv($f, $line))
            {
                show_error("Can't write line $n: $line");
            }
        }
        fclose($f) or show_error("Can't close php://output");
        $str = ob_get_contents();
        ob_end_clean();

        if ($download == "")
        {
            return $str;    
        }
        else
        {   
            echo $str;
        }       
    }
}

if ( ! function_exists('query_to_csv'))
{
    function query_to_csv($query, $headers = TRUE, $download = "")
    {
        if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
        {
            show_error('invalid query');
        }

        $array = array();

        if ($headers)
        {
            $line = array();
            foreach ($query->list_fields() as $name)
            {
                $line[] = $name;
            }
            $array[] = $line;
        }

        foreach ($query->result_array() as $row)
        {
            $line = array();
            foreach ($row as $item)
            {
                $line[] = $item;
            }
            $array[] = $line;
        }

        echo array_to_csv($array, $download);
    }
}
在查看页面中,它将显示结果: 用户id、用户名称、用户电子邮件、用户通行证、用户电话、用户国家/地区、用户城市、用户邮编、用户地址、用户类型、用户状态53、abcdef、,abcd@yahoo.com,12,1,0,,,学生,154,美国焊接学会,abc@yahoo.com,12,12,阿富汗,卡皮萨,,,,“资源人”,055,安蒂,ontika@ya.com,12,12,0,,,,“注册用户”,1 56,edf,df@abc.com,12,12,阿尔巴尼亚,Bulkize,,dewde,“管理用户”,158,米娜,meena@abc.com,,,,,,,“注册用户”,0 第61条,nisat,nisat@abc.com,,,,,,,“注册用户”,0

但不是下载!都试过Chrome和mozilla

怎么办


提前谢谢你

尝试将数组中的标题修改为\u csv()函数:

然后在输出部分之后,添加一个出口:

if ($download == "")
{
    return $str;    
}
else
{   
    echo $str;
}
exit;
或者尝试使用CodeIgniter的内置功能:

public function exportUser() {
    // Load database and query
    $this->load->database();
    $query = $this->db->get('user');

    // Load database utility class
    $this->load->dbutil();
    // Create CSV output
    $data = $this->dbutil->csv_from_result($query);

    // Load download helper
    $this->load->helper('download');
    // Stream download
    force_download('toto.csv', $data);
}
谢谢


安德鲁

我认为应该是
内容处置:附件
,而不是
附件
。编辑。。。但仍然是相同的情况:(您能验证标题设置是否正确吗?大多数浏览器中的“网络”检查器都会显示请求和响应标题。请尝试:标题('Content-Type:text/csv;charset=utf-8'));但不走运!我修改了答案,添加了修改csv_helper文件的选项。我更改了csv_helper.php,大小写相同!!我已编辑以添加出口。如果仍然不起作用,请尝试打开“显示错误”以确保没有任何内容干扰标题。即使是php警告/通知也可能导致问题。在index.ph中显示错误p但没有错误!我也试过使用普通文本文件。似乎没有下载任何类型的文件!是否有要启用或禁用的内容?请帮助!
if ($download == "")
{
    return $str;    
}
else
{   
    echo $str;
}
exit;
public function exportUser() {
    // Load database and query
    $this->load->database();
    $query = $this->db->get('user');

    // Load database utility class
    $this->load->dbutil();
    // Create CSV output
    $data = $this->dbutil->csv_from_result($query);

    // Load download helper
    $this->load->helper('download');
    // Stream download
    force_download('toto.csv', $data);
}