[php]readfile

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) 단위로 읽어오는 등의 방법으로 메모리 사용량을 최적화할 수 있습니다.
  • 캐싱을 활용하여 파일에 대한 요청을 최소화하고, 클라이언트 캐싱을 헤더로 지원하여 중복 다운로드를 방지합니다.

게시됨

카테고리

,

작성자