php实现导出功能实现
使用PHPExcel库导出Excel文件
安装PHPExcel库(需Composer支持)
composer require phpoffice/phpexcel
创建导出代码示例
require_once 'vendor/autoload.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'ID')
->setCellValue('B1', '姓名')
->setCellValue('C1', '邮箱');
// 填充数据示例
$data = [
[1, '张三', 'zhangsan@example.com'],
[2, '李四', 'lisi@example.com']
];
$row = 2;
foreach ($data as $item) {
$objPHPExcel->getActiveSheet()
->setCellValue('A'.$row, $item[0])
->setCellValue('B'.$row, $item[1])
->setCellValue('C'.$row, $item[2]);
$row++;
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="export_data.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
使用原生PHP导出CSV文件
简单CSV导出实现
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=export_data.csv');
$output = fopen('php://output', 'w');
// 写入表头
fputcsv($output, ['ID', '姓名', '邮箱']);
// 写入数据
$data = [
[1, '张三', 'zhangsan@example.com'],
[2, '李四', 'lisi@example.com']
];
foreach ($data as $row) {
fputcsv($output, $row);
}
fclose($output);
exit;
使用Laravel框架的导出功能
安装Laravel Excel包
composer require maatwebsite/excel
创建导出类
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
public function collection()
{
return \App\User::all();
}
}
控制器调用
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
大数据量导出优化方案
分块处理大数据量
$chunkSize = 1000;
$totalRows = 100000;
$fileName = 'large_export.csv';
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$fileName);
$output = fopen('php://output', 'w');
fputcsv($output, ['ID', '数据']);
for ($i = 1; $i <= $totalRows; $i += $chunkSize) {
$chunkData = [];
for ($j = $i; $j < min($i + $chunkSize, $totalRows); $j++) {
$chunkData[] = [$j, '数据'.$j];
}
foreach ($chunkData as $row) {
fputcsv($output, $row);
}
// 刷新输出缓冲
if (ob_get_level() > 0) {
ob_flush();
}
flush();
}
fclose($output);
exit;
导出功能安全注意事项
验证用户权限
if (!auth()->user()->can('export_data')) {
abort(403, '无权执行此操作');
}
过滤输入数据
$filteredData = array_map(function($item) {
return [
'id' => (int) $item['id'],
'name' => htmlspecialchars($item['name']),
'email' => filter_var($item['email'], FILTER_SANITIZE_EMAIL)
];
}, $rawData);
设置内存限制
ini_set('memory_limit', '512M');
set_time_limit(0);






