putcontent - php write file




如何从php脚本创建和下载csv文件? (4)

使用以下代码将php数组转换为CSV

<?php
   $ROW=db_export_data();//Will return a php array
   header("Content-type: application/csv");
   header("Content-Disposition: attachment; filename=test.csv");
   $fp = fopen('php://output', 'w');

   foreach ($ROW as $row) {
        fputcsv($fp, $row);
   }
   fclose($fp);

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

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

我想添加一个选项,以便在用户需要时,他/她可以创建一个包含数组元素的CSV文件并下载它。

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

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

我的数组看起来像:

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] => 
        )

)

如果你的数组结构总是以多种方式呈现多维,那么我们就可以迭代这样的元素:

$fh = fopen('somefile.csv', 'w') or die('Cannot open the file');

for( $i=0; $i<count($arr); $i++ ){
    $str = implode( ',', $arr[$i] );
    fwrite( $fh, $str );
    fwrite( $fh, "\n" );
}
fclose($fh);

这是一种方法...你可以手动完成它,但这种方式更快更容易理解和阅读。

然后你会管理你的头文件complex857正在做什么来吐出文件。 然后,如果您不再需要,可以使用unlink()删除该文件,或者如果您愿意,可以将其保留在服务器上。


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

正确的行应如下所示:

header('Content-Disposition: attachment;filename="'.$filename.'";');

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

header('Content-Type: application/csv; charset=UTF-8');

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

rewind($f);

谢谢你的解决方案!


Try...
csv download.
<?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();
?>






export-to-csv