예를 들어, 여러 이미지 파일을 한 번에 다운로드하고 싶을 때, 이미지 파일을 서버의 임시 디렉터리에 복사해 아카이브하여 다운로드할 수 있습니다. 하지만 이 방법은 이미지 파일을 하나씩 복사하게 되어 저장 공간에 부담이 가려지고, 파일이 많으면 복사하는 데 시간이 오래 걸릴 수 있습니다.
그래서 각 디렉토리마다 심볼릭 링크를 만들고 보관할 예정입니다.
먼저 임시 디렉터리를 만드세요.
$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"를 추가하세요. 지정된 디렉터리로 가서 처리하세요. 이렇게 하면 임시 디렉터리의 전체 경로에 아카이브되지 않습니다.
그 다음에는 이 파일을 다운로드하세요.