많은 웹 사이트 개발에서 사용자는 파일을 다운로드해야 할 수도 있습니다. PHP가 제공 한 헤더 기능을 사용하면 파일의 다운로드 동작을 제어하기 위해 HTTP 응답 헤더를 쉽게 설정할 수 있습니다. 이 튜토리얼에서는 PHP의 헤더 기능을 사용하여 다운로드 된 파일의 파일 이름을 지정하기 위해 컨텐츠 예치를 설정하는 방법을 소개합니다.
Content-Disposition은 브라우저에 파일을 처리하는 방법을 알려주는 HTTP 헤더입니다. 가장 일반적인 사용법은 브라우저에서 파일 다운로드를 시작하고 다운로드 된 파일의 파일 이름을 지정하는 것입니다. 일반적으로 콘텐츠 유형 과 함께 사용되며 브라우저에 파일의 콘텐츠 유형을 해석하는 방법을 알려줍니다.
헤더 기능은 원시 HTTP 헤더를 보내는 데 사용될 수 있습니다. 파일을 다운로드 할 때 파일 이름을 지정하려면 Content-Disposition 헤더를 설정할 수 있습니다. 간단한 예는 다음과 같습니다.
<?php
// 파일 경로를 설정하십시오
$file = 'path/to/your/file.txt';
// 파일이 있는지 확인하십시오
if (file_exists($file)) {
// 올바른 컨텐츠 유형을 설정하십시오,브라우저에 이것이 다운로드 파일이라고 말하십시오
header('Content-Type: application/octet-stream');
// 설정 Content-Disposition 머리,파일이 다운로드 될 때 파일 이름을 지정하십시오
header('Content-Disposition: attachment; filename="downloaded_file.txt"');
// 설정文件大小
header('Content-Length: ' . filesize($file));
// 파일 내용을 읽고 출력합니다
readfile($file);
exit;
} else {
echo "파일이 존재하지 않습니다!";
}
?>
헤더 ( 'content-type : application/octet-stream'); :이 코드 라인은 브라우저에 이진 파일을 다운로드하도록 지시하며 자동으로 열리지 않습니다.
헤더 ( 'content-disposition : 첨부 파일; filename = "downloaded_file.txt"'); :이 코드 라인은 파일이 첨부 파일 로 다운로드되었음을 지정하고 (예 : 다운로드) 파일에 다운로드 된 이름 "downloaded_file.txt" 가 할당됩니다.
헤더 ( 'content-length :'. filesize ($ file)); :이 코드 라인은 파일의 크기를 지정하여 브라우저가 파일 다운로드를 올바르게 처리 할 수 있도록 도와줍니다.
readfile ($ 파일); :이 함수는 파일을 읽고 내용을 브라우저로 보냅니다. 따라서 파일 다운로드를 시작합니다.
때로는 고정 문자열이 아니라 파일 이름이 동적으로 생성되기를 원할 수도 있습니다. 이 경우 파일 이름은 PHP 변수를 통해 설정할 수 있습니다. 예를 들어:
<?php
// 파일 경로를 설정하십시오
$file = 'path/to/your/file.txt';
// 파일 이름을 동적으로 생성합니다
$fileName = 'downloaded_' . date('Y-m-d_H-i-s') . '.txt';
// 파일이 있는지 확인하십시오
if (file_exists($file)) {
// 올바른 컨텐츠 유형을 설정하십시오
header('Content-Type: application/octet-stream');
// 动态설정 Content-Disposition 머리
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// 설정文件大小
header('Content-Length: ' . filesize($file));
// 파일 내용을 읽고 출력합니다
readfile($file);
exit;
} else {
echo "파일이 존재하지 않습니다!";
}
?>
이 예에서 파일 이름에는 현재 날짜와 시간 (예 : Downloaded_2025-05-04_12-30-45.txt )이 포함되며 다운로드 할 때마다 파일 이름이 다릅니다.
때로는 서버의 로컬 파일뿐만 아니라 URL을 통해 파일 다운로드를 제공해야합니다. 현재 헤더 기능을 사용하여 컨텐츠 공개를 설정하고 원격 서버에서 파일 컨텐츠를 다운로드 할 수도 있습니다.
<?php
// 설정远程文件 URL
$url = 'https://m66.net/files/sample.txt';
// 파일 내용을 얻으십시오
$fileContent = file_get_contents($url);
// 파일 내용이 성공적으로 얻은 경우
if ($fileContent !== false) {
// 설정文件类型
header('Content-Type: application/octet-stream');
// 설정文件下载名称
header('Content-Disposition: attachment; filename="sample_from_m66.txt"');
// 설정文件大小
header('Content-Length: ' . strlen($fileContent));
// 출력 파일 컨텐츠
echo $fileContent;
exit;
} else {
echo "파일을 다운로드 할 수 없습니다!";
}
?>
이 예에서는 https://m66.net/files/sample.txt 에서 파일을 다운로드하고 헤더를 통해 Sample_from_m66.txt 로 다운로드 파일의 이름을 설정합니다.
헤더를 보내기 전에 HTML 출력이 없는지 확인하십시오. 컨텐츠가 출력되기 전에 HTTP 헤더를 보내야하므로.
파일이 크면 전체 파일을 메모리에로드하는 대신 파일 내용을 스트리밍하는 것이 좋습니다.
PHP의 헤더 기능을 통해 파일을 다운로드 할 때 파일 이름을 설정하는 것을 포함하여 파일의 다운로드 동작을 쉽게 제어 할 수 있습니다. 실제 개발 에서이 기능은 특히 파일 관리 시스템 및 보고서 생성과 같은 응용 프로그램에서 매우 일반적입니다.