Codeigniter 强制下载 CSV 文件错误

问题描述 投票:0回答:3

问题来了 我想将我的数据转换为 csv 格式并下载。一切都很好,直到我下载的 csv 文件出现了一个小错误,文件的第一行有一个空格。

例如 强制下载前

“姓名”,“年龄”,
“布拉德·皮特”,“40”,`

强制下载后


“姓名”,“年龄”,
“布拉德·皮特”,“40”,

我下载并尝试用 Excel 打开的 csv 文件将如下所示
“姓名”|年龄
布拉德坑|40

我相信这是因为我下载的csv文件在数据的第一行出现了外部空格线。

这是代码

//写入csv数据
$data = $this->dbutil->csv_from_result($query, $delimiter);
//创建随机文件名
$name = rand().'_salesperson_data_'.date('d-m-y').'.csv';

if ( ! write_file('./csv/'.$name, $data))
{
     echo '无法写入 CSV 文件';
}
别的
{
    //执行下载
    $file = file_get_contents("./csv/".$name); // 读取文件内容
    $filename = 'salesperson_data_'.date('d-m-y').'.csv';
    Force_download($文件名, $文件);
}

force_download()的来源

if(!function_exists('force_download'))
{
    函数force_download($filename = '', $data = '')
    {

        if ($文件名 == '' 或 $数据 == '')
        {
            返回假;
        }

        // 尝试确定文件名是否包含文件扩展名。
        // 我们需要它来设置 MIME 类型
        if (FALSE === strpos($文件名, '.'))
        {
            返回假;
        }

        // 获取文件扩展名
        $x = 爆炸('.', $文件名);
        $扩展名=结束($x);

        // 加载 mime 类型
        @include(APPPATH.'config/mimes'.EXT);

        // 如果我们找不到它,则设置一个默认的 mime
        if ( !isset($mimes[$extension]))
        {
            $mime = '应用程序/八位字节流';
        }
        别的
        {
            $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
        }

        // 生成服务器头
        if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
        {
            header('内容类型:"'.$mime.'"');
            header('内容处置:附件; filename="'.$filename.'"');
            header('过期时间:0');
            header('Cache-Control: 必须重新验证,后检查=0,预检查=0');
            header("内容传输编码:二进制");
            标头('杂注:公共');
            header("内容长度:".strlen($data));
        }
        别的
        {
            header('内容类型:"'.$mime.'"');
            header('内容处置:附件; filename="'.$filename.'"');
            header("内容传输编码:二进制");
            header('过期时间:0');
            header('Pragma: no-cache');
            header("内容长度:".strlen($data));
        }

        退出($数据);
    }
}

我认为 TRIM 将是我的最后一个解决方案,我尝试在可能的地方放置任何内容,但仍然是一样的。我找不到这个问题的任何解决方案。请帮忙。这已经困扰我两天了。

提前致谢。

php csv codeigniter download
3个回答
1
投票

我不知道是否需要仅使用 CSV,但我使用的一个很好的插件/功能是这个:http://codeigniter.com/wiki/Excel_Plugin/

它与 CodeIgniter 查询系统配合使用,将内容导出到 Excel。我经常使用它,从来没有遇到过问题。


1
投票

尝试在浏览器上打印,如果您看到一些多余的空间,请删除。

如果您下载时 csv 文件中仍存在额外空间,则该额外空间来自您的任何包含文件。

当您开始编写代码时,尽量不要在代码的顶部/底部留出一些空间。


0
投票

在写入 CSV 之前使用

ob_clean();
删除空格。

© www.soinside.com 2019 - 2024. All rights reserved.