웹 개발에서 때때로 백엔드를 통해 CSV 보고서를 동적으로 생성하고 다운로드 할 수 있도록 서버에 올리는 대신 사용자에게 다운로드 할 수 있도록 제공해야합니다. PHP의 헤더 () 함수는 HTTP 응답 헤더를 수정하고 출력 컨텐츠와 결합 하여이 "시뮬레이션 된 다운로드"효과를 달성 할 수 있습니다.
이 기사를 사용하면이 기능을 단계별로 구현할 수 있습니다.
먼저 출력하려면 CSV 데이터 사본이 있어야합니다. 데이터베이스에서 추출하거나 수동으로 준비된 배열 일 수 있습니다.
$data = [
['이름', '우편', '등록 시간'],
['장 산', 'zhangsan@m66.net', '2025-05-01 10:00:00'],
['Li Si', 'lisi@m66.net', '2025-05-02 11:30:00'],
['왕 우', 'wangwu@m66.net', '2025-05-03 14:15:00'],
];
Header () 함수를 사용하여 브라우저에 일반 웹 페이지 출력이 아니라 파일 다운로드 응답임을 알려줍니다. 특히 중요한 것은 다음과 같습니다.
Content-Type는 브라우저에 이것이 CSV 파일이라고 알려줍니다.
Content-Disposition은 첨부 형 양식을 설정하고 다운로드 된 파일의 이름을 제공합니다.
캐시 제어 및 Pragma는 캐싱 문제를 피하는 데 도움이됩니다.
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="report.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
fopen ( 'php : // output', 'w')을 사용하여 컨텐츠를 출력 스트림에 직접 작성할 수 있으며 중간 파일을 생성 할 필요가 없습니다.
$output = fopen('php://output', 'w');
foreach ($data as $row) {
fputcsv($output, $row);
}
fclose($output);
<?php
$data = [
['이름', '우편', '등록 시간'],
['장 산', 'zhangsan@m66.net', '2025-05-01 10:00:00'],
['Li Si', 'lisi@m66.net', '2025-05-02 11:30:00'],
['왕 우', 'wangwu@m66.net', '2025-05-03 14:15:00'],
];
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="report.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
$output = fopen('php://output', 'w');
foreach ($data as $row) {
fputcsv($output, $row);
}
fclose($output);
추가 출력이 없습니다 <br> Header ()을 호출하기 전에 불필요한 출력 (공백, 라인 브레이크, BOM 포함)이 없으면 "헤더가 이미 전송 된"오류가 발생합니다.
코딩 문제 <br> 생성 된 CSV에 중국어가 포함 된 경우 Excel에서 열릴 때 Barbled 코드를 피하기 위해 UTF-8 BOM을 사용하거나 GBK로 변환하는 것이 가장 좋습니다.
동적 데이터 <br> 위의 예는 정적 배열을 사용합니다. 실제 프로젝트에서는 종종 데이터베이스에서 쿼리를 한 다음 배열로 철자해야합니다.