PHP 如何生成 CSV
不少做数据导出的朋友都遇到过这种情况:用户提交了几十条商品信息、考勤记录,想存成能直接用 Excel 打开的表格,总不能一条一条复制粘贴吧?这时候用 PHP 生成 CSV 文件,就是个省心又高效的办法,而且整个过程没那么复杂,跟着步骤走很快就能上手。
先搞懂:CSV到底是什么?
很多人可能听过CSV,但没仔细想过它和Excel文件的区别。简单说,CSV就是“用逗号分隔值”的纯文本文件,Excel能直接识别它,本质上就是把表格里的每一行数据,用逗号隔开每一列,换行符分隔每一行。举个生活化的例子:你把手机通讯录里的联系人,姓名、电话、地址这三项,一行一行写成“张三,138XXXX1234,北京市朝阳区”“李四,139XXXX5678,上海市浦东新区”,保存成txt后把后缀改成.csv,就是一个标准的CSV文件了。它没有Excel的格式、公式这些花里胡哨的东西,胜在轻量、兼容性强,不管是网站导出、小程序数据同步都能用。

用PHP生成CSV的3个核心步骤
PHP处理这类文件不用引入复杂插件,自带的函数就能搞定,咱们分三步拆解,每一步都带实际例子,照着敲就能用。
第一步:先准备好要导出的数据。比如我们要导出一家小店的商品清单,先把数据存在数组里,就像平时存信息那样:
$goods = [
['商品名称', '单价', '库存'],
['纯棉T恤', 59, 120],
['无线耳机', 299, 45],
['帆布背包', 89, 78]
];
这里第一行是表头,后面是具体的商品数据,是不是和Excel里的表格结构一模一样?
第二步:打开文件输出流,让浏览器能直接下载。这里不用自己新建一个实际的文件存在服务器,而是直接输出到浏览器,适合用户点击按钮就下载的场景,用到两个关键函数:先告诉浏览器“这是要下载的CSV文件”,再打开输出流写入数据:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="goods_list.csv"');
$output = fopen('php://output', 'w');
是不是很简单?这里的filename就是用户下载后看到的文件名,比如要导出考勤表就写“attendance_202405.csv”,一目了然。
第三步:把数据逐行写入。PHP有个专门的fputcsv函数,它会自动帮我们处理逗号分隔,不用手动加逗号,特别贴心:
foreach ($goods as $row) {
fputcsv($output, $row);
}
最后别忘了关闭输出流:fclose($output); 这样用户点击导出按钮,就会自动下载生成好的CSV文件了。
几个容易踩的小坑,一定要注意
刚上手的朋友可能会遇到打开CSV乱码、数据错位的问题,这几个细节别忽略:
第一个是编码问题,很多时候CSV乱码是因为编码不对,PHP输出前加个header声明utf-8,或者在数据前加个UTF-8的BOM头,就能和Excel的编码匹配,不会出现“张三”变成乱码的情况;第二个是特殊字符,比如数据里有逗号、双引号,fputcsv会自动处理,比如把“苹果,香蕉”写成"苹果,香蕉",打开Excel不会把它分成两列;第三个是大文件的情况,如果导出几万条数据,别把所有数据一次性存在数组里,可以逐行从数据库读取,再逐行写入输出流,避免占用太多服务器内存。
学会这个方法后,不管是导出用户反馈、订单数据,还是简单的统计表格,都能快速搞定,不用再找专门的工具转换。哪怕是没接触过PHP的新手,照着例子敲一遍,就能做出一个实用的数据导出功能,比手动复制效率高太多了。