[php] PHP에서 ZIP 파일을 생성한 후 다운로드 링크 제공하기

웹 애플리케이션을 개발하다 보면 사용자에게 파일을 다운로드할 수 있는 기능이 필요한 경우가 있습니다. 이때 여러 파일을 하나의 ZIP 파일로 묶어서 다운로드 링크를 제공하는 것이 유용할 수 있습니다. 이 포스트에서는 PHP를 사용하여 ZIP 파일을 생성한 후 다운로드 링크를 제공하는 방법에 대해 알아보겠습니다.

1. ZIP 파일 생성하기

PHP에서 ZIP 파일을 생성하려면 ZipArchive 클래스를 사용할 수 있습니다. 아래 예제 코드는 ZipArchive 클래스를 사용하여 files 디렉토리에 있는 파일들을 archive.zip으로 압축하는 코드입니다.

$zip = new ZipArchive();
if ($zip->open('archive.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('files/'));
    foreach ($files as $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen('files/'));
            $zip->addFile($filePath, $relativePath);
        }
    }
    $zip->close();
    echo 'ZIP 파일이 생성되었습니다.';
} else {
    echo 'ZIP 파일을 생성하는데 실패했습니다.';
}

2. 다운로드 링크 제공하기

ZIP 파일을 생성한 후에는 사용자에게 다운로드 링크를 제공해야 합니다. 아래 예제 코드는 생성된 ZIP 파일을 사용자에게 다운로드할 수 있는 링크를 제공하는 코드입니다.

$zipFileName = 'archive.zip';
if (file_exists($zipFileName)) {
    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="' . $zipFileName . '"');
    readfile($zipFileName);
    unlink($zipFileName); // 다운로드 후 파일 삭제
} else {
    echo 'ZIP 파일을 찾을 수 없습니다.';
}

위 코드에서 header 함수를 사용하여 HTTP 헤더를 설정하여 ZIP 파일을 다운로드할 수 있도록 합니다. 또한, readfile 함수를 사용하여 파일을 출력하고, 다운로드 후에는 unlink 함수를 사용하여 생성된 ZIP 파일을 삭제합니다.

이제 PHP를 사용하여 ZIP 파일을 생성하고 다운로드 링크를 제공하는 방법에 대해 알아보았습니다. 이를 응용하여 사용자에게 편리한 파일 관리 기능을 제공할 수 있을 것입니다.

참고 자료