Codeigniter强制下载CSV文件错误

时间:2011-05-18 13:16:29

标签: codeigniter csv download

这是问题所在 我想将我的数据转换为csv格式并下载。一切都很好,直到我下载的csv文件和文件的一个小错误,文件的第一行会有一个空格。

例如,

在强行下载之前

"name","age",
"brad pit","40",`

强行下载后


"name","age",
"brad pit","40",

我已经下载的csv文件,我尝试打开我的excel文件就像这样 “名字”|年龄
布拉德坑| 40

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

这是代码

//write csv data
$data = $this->dbutil->csv_from_result($query, $delimiter);
//create random file name
$name = rand().'_salesperson_data_'.date('d-m-y').'.csv';

if ( ! write_file('./csv/'.$name, $data))
{
     echo 'Unable to write the CSV file';
}
else
{
    //perform download
    $file = file_get_contents("./csv/".$name); // Read the file's contents
    $filename = 'salesperson_data_'.date('d-m-y').'.csv';
    force_download($filename, $file);
}

force_download()

的来源
if ( ! function_exists('force_download'))
{
    function force_download($filename = '', $data = '')
    {

        if ($filename == '' OR $data == '')
        {
            return FALSE;
        }

        // Try to determine if the filename includes a file extension.
        // We need it in order to set the MIME type
        if (FALSE === strpos($filename, '.'))
        {
            return FALSE;
        }

        // Grab the file extension
        $x = explode('.', $filename);
        $extension = end($x);

        // Load the mime types
        @include(APPPATH.'config/mimes'.EXT);

        // Set a default mime if we can't find it
        if ( ! isset($mimes[$extension]))
        {
            $mime = 'application/octet-stream';
        }
        else
        {
            $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
        }

        // Generate the server headers
        if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
        {
            header('Content-Type: "'.$mime.'"');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header("Content-Transfer-Encoding: binary");
            header('Pragma: public');
            header("Content-Length: ".strlen($data));
        }
        else
        {
            header('Content-Type: "'.$mime.'"');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header("Content-Transfer-Encoding: binary");
            header('Expires: 0');
            header('Pragma: no-cache');
            header("Content-Length: ".strlen($data));
        }

        exit($data);
    }
}

我认为TRIM将是我的最后一个解决方案,我尝试尽可能地放置任何东西但是仍然相同。我找不到任何解决这个问题的方法。请帮忙。这已经困扰了我2天了。

先谢谢了。

3 个答案:

答案 0 :(得分:1)

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

它适用于CodeIgniter查询系统,用于将内容导出到Excel。我经常使用它,从来没有遇到任何问题。

答案 1 :(得分:1)

尝试在浏览器上打印,如果你看到一些额外的空间,那就删除。

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

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

答案 2 :(得分:0)

在写入CSV以删除空格之前使用.S