readfile
함수 설명과 샘플 코드
readfile
함수는 파일의 내용을 읽어서 클라이언트에 직접 출력하는 PHP 내장 함수입니다. HTTP 파일 다운로드나 이미지 표시 등에 유용하게 사용될 수 있습니다.
사용법:
int readfile ( string $filename [, bool $use_include_path = FALSE [, resource $context ]] )
$filename
: 읽을 파일의 경로와 이름입니다.$use_include_path
: true로 설정하면include_path
에서 파일을 찾습니다. 기본값은FALSE
입니다.$context
: 컨텍스트 옵션을 제공할 수 있습니다. 보통은 생략합니다.
예제:
$file = 'example.txt';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
readfile
함수를 응용한 코드
1. 이미지 출력하기
$imageFile = 'example.jpg';
if (file_exists($imageFile)) {
header('Content-Type: image/jpeg');
readfile($imageFile);
exit;
}
readfile
함수와 다른 함수 사용하여 응용하는 코드
2. 파일 다운로드 링크 생성하기
$files = ['example1.txt', 'example2.jpg', 'example3.pdf'];
foreach ($files as $file) {
if (file_exists($file)) {
echo '<a href="download.php?file=' . urlencode($file) . '">' . $file . '</a><br>';
}
}
download.php
파일 내에서 readfile
함수를 사용하여 파일을 다운로드합니다.
readfile
함수와 조건문, 반복문 사용하는 샘플 코드
3. 특정 디렉토리의 파일 목록 출력하기
$directory = './documents/';
if (is_dir($directory)) {
$files = scandir($directory);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
echo $file . '<br>';
}
}
}
성능 향상을 위한 팁
readfile
함수는 파일을 메모리로 먼저 로드하지 않고 직접 출력하므로 메모리 측면에서 효율적입니다.- 대용량 파일을 다루는 경우 적절한 버퍼링을 사용하거나 파일을 청크(chunk) 단위로 읽어오는 등의 방법으로 메모리 사용량을 최적화할 수 있습니다.
- 캐싱을 활용하여 파일에 대한 요청을 최소화하고, 클라이언트 캐싱을 헤더로 지원하여 중복 다운로드를 방지합니다.