詳細検索

여러 파일 아카이브를 다운로드하는 방법

아바타
글쓴이 すがピー
2분 읽기
태그 php

여러 파일 아카이브를 다운로드하는 방법
日本語에서 번역 • 원문 보기

예를 들어, 여러 이미지 파일을 한 번에 다운로드하고 싶을 때, 이미지 파일을 서버의 임시 디렉터리에 복사해 아카이브하여 다운로드할 수 있습니다. 하지만 이 방법은 이미지 파일을 하나씩 복사하게 되어 저장 공간에 부담이 가려지고, 파일이 많으면 복사하는 데 시간이 오래 걸릴 수 있습니다.

그래서 각 디렉토리마다 심볼릭 링크를 만들고 보관할 예정입니다.

먼저 임시 디렉터리를 만드세요.

$tmp_path = "/tmp/" . uniqid(rand()); 
$archive_dir = "(지정하려는 디렉터리 이름)"; 
$tmp_dir = $tmp 경로. "/" . $archive_dir; 

임시 디렉터리로 가는 경로와 임시 디렉터리 이름을 분리하는 이유는 나중에 설명하겠습니다.

다음으로, 임시 디렉터리에 이미지 파일에 대한 심볼링크를 생성하세요.

$filelists: 이미지 파일 이름 목록
$$image_dir: 이미지 파일의 저장 디렉터리
foreach( $filelists $image_name ): 
    $target = $image_dir . "/" . $img_name; 
    $link = $tmp_dir . "/" . $img_name; 
    심임링크($target, $link); 
}

그 후에는 이 임시 디렉터리도 아카이브할 예정입니다. 특히 이미지 파일의 경우, 압축해도 크기가 크게 변하지 않기 때문에, tar로 아카이브하면 압축 과정이 없어 과정이 더 빠릅니다. tar 명령어 옵션에 "h"를 추가하면 심볼 링크를 하나의 엔티티로 아카이브할 수 있습니다. 이것이 핵심입니다.

아카이브 파일 경로 설정
$tar_file = tempnam("/tmp", "다운로드"); 

tar 명령어가 있는 아카이브
$command = "tar chf $tar_file -C $tmp_path $archive_dir";  
system($command ); 

이때 tar 명령어 옵션에 "-C"를 추가하세요. 지정된 디렉터리로 가서 처리하세요. 이렇게 하면 임시 디렉터리의 전체 경로에 아카이브되지 않습니다.

그 다음에는 이 파일을 다운로드하세요.

Related Articles