PHP导出数据需通过代码生成文件并设置响应头触发下载;CSV用fputcsv避免格式错误,Excel需PhpSpreadsheet库,JSON/XML适用于API;须校验权限、过滤XSS、处理中文名及大数据异步导出。

PHP 文件本身不直接“导出数据”,而是通过代码将数据(如数据库查询结果、数组等)生成并下载为 Excel、CSV、JSON 等格式文件。关键在于:在 PHP 脚本中构造数据,设置正确的 HTTP 响应头,再输出内容到浏览器触发下载。
导出为 CSV 文件(最常用、轻量、兼容性好)
适合导出表格类结构化数据,Excel 和 WPS 都能直接打开。
- 用 fputcsv() 函数逐行写入数据,避免手动拼接逗号和引号带来的格式错误
- 必须在输出前设置响应头,例如:
php
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="data.csv"');
$fp = fopen('php://output', 'w');
fputcsv($fp, ['姓名', '邮箱', '注册时间']); // 表头
fputcsv($fp, ['张三', 'zhang@example.com', '2024-05-01']); // 数据行
fclose($fp);
?> - 注意:不能有任何额外输出(如空格、echo、BOM 字符),否则 CSV 下载会损坏
导出为 Excel(.xlsx 格式,支持样式和多 Sheet)
需借助第三方库,推荐 PhpSpreadsheet(官方维护、功能全、替代已停止更新的 PHPExcel)。
- 先用 Composer 安装:
composer require phpoffice/phpspreadsheet - 基础导出示例:
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray([['姓名','电话'],['李四','138****1234']]);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="users.xlsx"');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
?> - 大文件建议启用内存优化或分批写入,避免超时或内存溢出
导出为 JSON 或 XML(供程序调用或前端解析)
适用于 API 接口或前后端分离场景,不用于人工查看。
拍客竞拍系统是一款免费竞拍网站建设软件,任何个人可以下载使用,但未经商业授权不能进行商业活动,程序源代码开源,任何个人和企业可以进行二次开发,但不能以出售和盈利为目的。安装方法,将www文件夹里面的所有文件上传至虚拟主机,在浏览器执行http://你的域名/install.php或者直接导入数据库文件执行。本次升级优化了一下内容1,程序和模板完美分离。2,优化了安装文件。3,后台增加模板切换功能。
立即学习“PHP免费学习笔记(深入)”;
- JSON 导出只需设置头 + json_encode:
header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - XML 可用 SimpleXML 或 DOMDocument 构建,但更推荐 JSON —— 更简洁、解析成本低
- 注意:若需下载而非直接展示,加
Content-Disposition: attachment头即可
安全与实用提醒
导出功能常被忽略安全细节,容易引发风险。
- 导出前务必校验用户权限(如是否登录、是否有导出权限)
- 对导出字段和数据做过滤,避免 XSS(尤其导出含 HTML 或用户输入的内容)
- 大数据量导出建议异步处理(如写入临时文件 + 消息队列),防止请求超时
- 中文文件名在部分浏览器(如 Safari)可能乱码,可用
mb_convert_encoding()或 UA 判断适配










