TAR 파일 – 7.클래스

여기서 공개하는 hTarFile 클래스는 바로 TAR 아카이브를 생성하거나 또는 풀 수 있도록 작성된 소스이며 PHP에 내장되어 제공되고 있는 zlib 라이브러리(gz로 시작하는 함수들)를 이용하여 압축할 수 있도록 하였습니다.

hTarFile 클래스 0.0.1 버전 설계의 기본 컨셉은 기존의 유닉스 tar 유틸리티의 사용법만 알면 별문제없이 사용하도록 하겠다는 것입니다. 따라서 이미 tar 유틸리티를 사용할 줄 아는 유닉스 사용자라면 별 어려움없이 hTarFile 클래스를 이용할 수 있으리라 생각합니다.

객체 생성 및 생성자

public 메소드

void root(string path-to-files);

root 메소드로 지정하는 path-to-files 인자는 묶고자 하는 파일들의 기본 디렉토리를 의미합니다. 클래스 내의 모든 메소드는 이 기본 디렉토리를 베이스로 처리하기 때문에 매우 중요합니다. 지정하지 않으면 null로 처리되므로 TAR 아카이브를 다루어주는 tar 메소드에서 디렉토리를 완벽하게 지정하여야 합니다.

또 한가지 중요한 것은 여기서 지정되는 path-to-files는 hTarFile 클래스를 이용하기 전에 먼저 해당 서버의 쉘 명령을 이용하여 생성시켜야 하며 TAR 아카이브 또는 tar.gz 파일이 기록되는 디렉토리는 반드시 디렉토리 내에 파일을 기록할 수 있도록 퍼미션을 조정하셔야 합니다. 가장 쉬운 방법은 퍼미션을 777로 설정하는 것이지요. 물론 윈도우 서버에서는 퍼미션 대신에 “읽기전용”으로만 해놓지 않으면 됩니다.

이와 같이 생성 또는 추출하고자 하는 TAR 아카이브 및 TAR 아카이브에 속할/속한 멤버파일들의 기본 디렉토리를 root 메소드로 지정합니다. 일단 root 메소드로 디렉토리가 지정된 후에는 tar 메소드에서는 이 기본 디렉토리를 기준으로하여 상대디렉토리가 지정됩니다.

묶고자 하는 파일 s1.txt는 /tmp/hFiles 에 있으며, 또한 생성하고자 하는 sample.tar.gz 파일도 /tmp/hFiles 에 생성됩니다. 만약 root 메소드에 지정된 디렉토리가 절대디렉토리가 아니라 상대디렉토리로 지정하였다면 기준이 되는 디렉토리는 현재 실행중인 문서가 있는 디렉토리가 됩니다.

int tar (string options, string tar_filename, string files or dirs)

사용법은 리눅스에서 제공되는 tar 유틸리티와 거의 유사합니다. tar 유틸리티와 다른 점은 옵션 앞에 붙게 되는 -(minus) 부호가 생략되었다는 것입니다. 다른 것은 동일합니다. 물론 기능적인 것으로 보면 tar 유틸리티가 제공하는 모든 기능을 제공하지는 않으며 그 중에 꼭 필요한 옵션만 제공합니다. 또한 tar 유틸리티에서는 x 옵션을 주었을 때 TAR 아카이브 파일명 뒤에 파일명이나 디렉토리명을 지정하면 해당 파일 또는 디렉토리의 내용만 추출하게 됩니다. 그러나 hTarFile 클래스에서는 파일이나 디렉토리명을 지정하더라도 이를 무시하고 전체를 추출하도록 되어 있습니다. 이 부분은 향후 업그레이드하면서 업하도록 노력하겠습니다.

TAR 아카이브 생성이나 추출에 성공하면 멤버파일 리스트를 되돌려 주며 실패하면 false 값이 되돌려 줍니다.

TAR 아카이브 묶기/풀기/압축하기

TAR 아카이브로 묶기

리눅스의 tar 유틸리티에서 여러 개의 파일을 TAR 아카이브로 묶기 위해서는 아래와 같이 하게 되지요.

  • tar -cf  tar-file file | dir ……

예를 들면

  • tar -cf sample.tar s1.txt s2.txt sub1 sub2

이 명령을 수행하면 s1.txt, s2.txt 파일과 sub1, sub2 디렉토리에 있는 모든 파일을 하나의 파일 sample.tar에 묶어 버리지요. 이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.

이 문장들을 수행하게 되면 “/hwooky” 디렉토리에 있는 s1.txt, s2.txt와 /hwooky/sub1, /hwooky/sub2 디렉토리에 있는 모든 파일을 sample.tar 아카이브 파일로 묶게 됩니다.

TAR 아카이브을 풀기

리눅스의 tar 유틸리티에서 TAR 아카이브를 여러 개의 파일로 풀기 위해서는 아래와 같이 하게 되지요.

  • tar -xf  tar-file

예를 들면

  • tar -xf sample.tar

이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.

앞에서 설명하였듯이 이 메소드를 수행하기 전에 root 메소드에서 지정한 “/tmp/hFiles/extract” 디렉토리를 먼저 만들어주고 퍼미션을 쓰기가능하도록 (예를 들면 chmod 777) 설정하여야 제대로 파일을 풀어줄 수 있습니다.

tar.gz 파일로 압축하기

리눅스의 tar 유틸리티에서 여러개의 파일을 TAR 아카이브로 묶음과 동시에 자동적으로 gzip 명령으로 압축하기 위해서는 z 옵션을 추기하여야 합니다.

  • tar -cfz  tar-file file | dir ……

예를 들면

  • tar -cfz sample.tar.gz s1.txt s2.txt sub1 sub2

이 명령을 수행하면 s1.txt, s2.txt 파일과 sub1, sub2 디렉토리에 있는 모든 파일을 하나의 파일로 묶음과 동시에 gzip 형식으로 압축하여 sample.tar.gz 파일로 저장합니다. 이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.

tar.gz 파일을 압축해제하기

리눅스의 tar 유틸리티에서 여러개의 파일을 TAR 아카이브로 묶음과 동시에 자동적으로 gzip 명령으로 압축하기 위해서는 z 옵션을 추기하여야 합니다.

  • tar -xfz  tar-file

예를 들면

  • tar -xfz sample.tar

이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.

메소드 tar에서 지원하는 옵션

hTarFile 클래스의 메소드 tar에서 지원하는 옵션을 정리하면 아래와 같습니다.

< 지원하는 옵션 >
지원하는 옵션 기  능
c TAR 아카이브 생성
f TAR 아카이브 파일명 지정
x TAR 아카이브 추출
z TAR 아카이브를 압축 및 해제

이 옵션 중에서 f 옵션은 반드시 지정하여야 하고 z 옵션은 압축할 필요가 있을 때만 지정하면 됩니다. 나머지 c와 x 옵션은 둘 중에 하나만 선택하십시요. 묶으려면 c 옵션을 선택하고 풀려면 x 옵션을 선택하십시요.

답글 남기기