首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从php脚本中创建和下载csv文件?

如何从php脚本中创建和下载csv文件?
EN

Stack Overflow用户
提问于 2013-04-27 19:35:50
回答 5查看 302.5K关注 0票数 109

我是一个新手程序员,我搜索了很多关于我的问题,但找不到关于这个问题的有用的解决方案或教程。

我的目标是拥有一个PHP数组,并且数组元素显示在页面上的列表中。

我想添加一个选项,这样如果用户愿意,他/她可以创建一个包含数组元素的CSV文件并下载它。

我不知道该怎么做。我也搜索了很多。但是还没有找到任何有用的资源。

请为我提供一些教程或解决方案或建议,以实现它自己。由于我是一个新手,请提供易于实施的解决方案。

我的数组如下所示:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [fs_id] => 4c524d8abfc6ef3b201f489c
            [name] => restaurant
            [lat] => 40.702692
            [lng] => -74.012869
            [address] => new york
            [postalCode] => 
            [city] => NEW YORK
            [state] => ny
            [business_type] => BBQ Joint
            [url] => 
        )

)
EN

回答 5

Stack Overflow用户

发布于 2013-10-25 00:46:19

我没有足够的名气回复@complex857 857解决方案。它工作得很好,但我必须在Content-Disposition头的末尾添加。如果没有它,浏览器会在文件名的末尾添加两个破折号(例如,文件将保存为"export.csv“,而不是"export.csv--")。它可能试图清理\r\n标题行末尾的内容。

正确的行应如下所示:

代码语言:javascript
复制
header('Content-Disposition: attachment;filename="'.$filename.'";');

如果CSV中包含UTF-8字符,则必须通过更改Content-Type行将编码更改为UTF-8:

代码语言:javascript
复制
header('Content-Type: application/csv; charset=UTF-8');

此外,我发现使用rewind()而不是fseek()会更优雅:

代码语言:javascript
复制
rewind($f);

感谢您的解决方案!

票数 19
EN

Stack Overflow用户

发布于 2014-05-14 21:13:21

试试..。csv下载。

代码语言:javascript
复制
<?php 
mysql_connect('hostname', 'username', 'password');
mysql_select_db('dbname');
$qry = mysql_query("SELECT * FROM tablename");
$data = "";
while($row = mysql_fetch_array($qry)) {
  $data .= $row['field1'].",".$row['field2'].",".$row['field3'].",".$row['field4']."\n";
}

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="filename.csv"');
echo $data; exit();
?>
票数 16
EN

Stack Overflow用户

发布于 2019-01-30 12:29:23

这就是我在我的项目中使用的函数,它按预期工作。

代码语言:javascript
复制
function array_csv_download( $array, $filename = "export.csv", $delimiter=";" )
{
    header( 'Content-Type: application/csv' );
    header( 'Content-Disposition: attachment; filename="' . $filename . '";' );

    // clean output buffer
    ob_end_clean();
    
    $handle = fopen( 'php://output', 'w' );

    // use keys as column titles
    fputcsv( $handle, array_keys( $array['0'] ), $delimiter );

    foreach ( $array as $value ) {
        fputcsv( $handle, $value, $delimiter );
    }

    fclose( $handle );

    // flush buffer
    ob_flush();
    
    // use exit to get rid of unexpected output afterward
    exit();
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16251625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档