phpsource/파일분석2002. 9. 9. 16:48
여기서 공개하는 hTarFile 클래스는 바로 TAR 아카이브를 생성하거나 또는 풀 수 있도록 작성된 소스이며 PHP에 내장되어 제공되고 있는 zlib 라이브러리(gz로 시작하는 함수들)를 이용하여 압축할 수 있도록 하였습니다.
hTarFile 클래스 0.0.1 버전 설계의 기본 컨셉은 기존의 유닉스 tar 유틸리티의 사용법만 알면 별문제없이 사용하도록 하겠다는 것입니다. 따라서 이미 tar 유틸리티를 사용할 줄 아는 유닉스 사용자라면 별 어려움없이 hTarFile 클래스를 이용할 수 있으리라 생각합니다.
객체 생성 및 생성자
[code php;gutter:false] require_once("class.hTarFile.php");
$my = & new hTarFile; [/code]
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 메소드에서는 이 기본 디렉토리를 기준으로하여 상대디렉토리가 지정됩니다.
[code php;gutter:false] $my->root("/tmp/hFiles");
$my->tar("cfz sample.tar.gz s1.txt"); [/code]
묶고자 하는 파일 s1.txt는 /tmp/hFiles 에 있으며, 또한 생성하고자 하는 sample.tar.gz 파일도 /tmp/hFiles 에 생성됩니다. 만약 root 메소드에 지정된 디렉토리가 절대디렉토리가 아니라 상대디렉토리로 지정하였다면 기준이 되는 디렉토리는 현재 실행중인 문서가 있는 디렉토리가 됩니다.
int tar (string options, string tar_filename, string files or dirs)
[code php;gutter:false] $my->tar("cfz sample.tar.gz s1.txt s2.txt s3.txt subdir1 subdir2"); [/code]
사용법은 리눅스에서 제공되는 tar 유틸리티와 거의 유사합니다. tar 유틸리티와 다른 점은 옵션 앞에 붙게 되는 -(minus) 부호가 생략되었다는 것입니다. 다른 것은 동일합니다. 물론 기능적인 것으로 보면 tar 유틸리티가 제공하는 모든 기능을 제공하지는 않으며 그 중에 꼭 필요한 옵션만 제공합니다. 또한 tar 유틸리티에서는 x 옵션을 주었을 때 TAR 아카이브 파일명 뒤에 파일명이나 디렉토리명을 지정하면 해당 파일 또는 디렉토리의 내용만 추출하게 됩니다. 그러나 hTarFile 클래스에서는 파일이나 디렉토리명을 지정하더라도 이를 무시하고 전체를 추출하도록 되어 있습니다. 이 부분은 향후 업그레이드하면서 업하도록 노력하겠습니다.
TAR 아카이브 생성이나 추출에 성공하면 멤버파일 리스트를 되돌려 주며 실패하면 false 값이 되돌려 줍니다.
[code php;gutter:false] require_once("class.hTarFile.php");
$my = & new hTarFile;

$my->root("/tmp/ext");

if (!$files=$my->tar("xfz sample.tar.gz")) {
die("unable to extract TAR archive");
} else {
printf("<P>TAR archive was successfully extracted!</P>\n");

foreach ($files as $file) {
printf("%s<BR>\n", $file);
}
} [/code]
1) 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를 이용한다면 아래와 같습니다.
[code php;gutter:false] $my->root("/hwooky");
$my->tar("cf sample.tar s1.txt s2.txt sub1 sub2"); [/code]
이 문장들을 수행하게 되면 "/hwooky" 디렉토리에 있는 s1.txt, s2.txt와 /hwooky/sub1, /hwooky/sub2 디렉토리에 있는 모든 파일을 sample.tar 아카이브 파일로 묶게 됩니다.
2) TAR 아카이브을 풀기
리눅스의 tar 유틸리티에서 TAR 아카이브를 여러 개의 파일로 풀기 위해서는 아래와 같이 하게 되지요.
tar -xf  tar-file
예를 들면
tar -xf sample.tar
이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.
[code php;gutter:false] $my->root("/tmp/hFiles/extract");
$my->tar("xf sample.tar"); [/code]
앞에서 설명하였듯이 이 메소드를 수행하기 전에 root 메소드에서 지정한 "/tmp/hFiles/extract" 디렉토리를 먼저 만들어주고 퍼미션을 쓰기가능하도록 (예를 들면 chmod 777) 설정하여야 제대로 파일을 풀어줄 수 있습니다.
3) 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를 이용한다면 아래와 같습니다.
[code php;gutter:false] $my->tar("cfz sample.tar.gz s1.txt s2.txt sub1 sub2"); [/code]
4) tar.gz 파일을 압축해제하기
리눅스의 tar 유틸리티에서 여러개의 파일을 TAR 아카이브로 묶음과 동시에 자동적으로 gzip 명령으로 압축하기 위해서는 z 옵션을 추기하여야 합니다.
tar -xfz  tar-file
예를 들면
tar -xfz sample.tar
이를 hTarFile 클래스의 메소드 tar를 이용한다면 아래와 같습니다.
[code php;gutter:false] $my->tar("xfz sample.tar"); [/code]
메소드 tar에서 지원하는 옵션
hTarFile 클래스의 메소드 tar에서 지원하는 옵션을 정리하면 아래와 같습니다.
< 지원하는 옵션 >
지원하는 옵션 기  능

c

TAR 아카이브 생성

f

TAR 아카이브 파일명 지정

x

TAR 아카이브 추출

z

TAR 아카이브를 압축 및 해제

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

'phpsource > 파일분석' 카테고리의 다른 글

{INI 파일}1.개요  (0) 2003.06.25
{TAR 파일}8.클래스 다운로드  (0) 2002.09.16
{TAR 파일}6.zlib를 이용한 압축  (0) 2002.09.09
{TAR 파일}5.후미에 붙여지는 블록  (0) 2002.09.09
{TAR 파일}4.본문 구조  (0) 2002.09.09
Posted by 방글24