현재 위치: > 최신 기사 목록> Header ()를 사용하여 CSV 보고서 다운로드 시나리오를 시뮬레이션하십시오.

Header ()를 사용하여 CSV 보고서 다운로드 시나리오를 시뮬레이션하십시오.

M66 2025-05-18

웹 개발에서 때때로 백엔드를 통해 CSV 보고서를 동적으로 생성하고 다운로드 할 수 있도록 서버에 올리는 대신 사용자에게 다운로드 할 수 있도록 제공해야합니다. PHP의 헤더 () 함수는 HTTP 응답 헤더를 수정하고 출력 컨텐츠와 결합 하여이 "시뮬레이션 된 다운로드"효과를 달성 할 수 있습니다.

이 기사를 사용하면이 기능을 단계별로 구현할 수 있습니다.

1 단계 : CSV 데이터 준비

먼저 출력하려면 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'],
];

2 단계 : HTTP 헤더를 설정하십시오

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');

3 단계 : 출력 CSV 컨텐츠

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);

주목해야 할 것

  1. 추가 출력이 없습니다 <br> Header ()을 호출하기 전에 불필요한 출력 (공백, 라인 브레이크, BOM 포함)이 없으면 "헤더가 이미 전송 된"오류가 발생합니다.

  2. 코딩 문제 <br> 생성 된 CSV에 중국어가 포함 된 경우 Excel에서 열릴 때 Barbled 코드를 피하기 위해 UTF-8 BOM을 사용하거나 GBK로 변환하는 것이 가장 좋습니다.

  3. 동적 데이터 <br> 위의 예는 정적 배열을 사용합니다. 실제 프로젝트에서는 종종 데이터베이스에서 쿼리를 한 다음 배열로 철자해야합니다.