phpsource/파일분석2002. 9. 9. 14:57
TAR(Tape ARchive) 아카이브 파일은 1970년대 자기테이프에 백업 & 검색하기 위하여 유래되었다고 합니다만 지금은 주로 여러 개의 파일을 묶어 전송하기 위하여 사용됩니다. 기본적으로 TAR 아카이브는 여러 개의 파일을 전혀 압축하지 않은 상태로 단지 하나의 파일로 묶어주는 역할만을 합니다. 우리가 보통 유닉스에서 제공하는 tar 유틸리티를 이용할 때 z 옵션을 지정하여 주면 압축까지 하는 것을 볼 수 있습니다. 그러나 이는 tar 유틸리티에서 압축해 주는 것이 아니라 tar 유틸리티와는 별개로 작성되어 있는 gzip 유틸리티를 불러다가 압축하게 되지요.
PHP 에서의 상황을 보면 zlib 라이브러리(gz로 시작하는 함수들)를 통해 파일을 압축할 수 있습니다. 그러나 zlib 함수는 기본적으로 하나의 파일만 다룰 수 있습니다. 웹상에서 여러 파일을 압축하고 해제하는 것이 다소 위험하여 그런지는 알 수 없으나 웹 스크립트에서는 TAR 아카이브를 잘 다루지 않는 것 같습니다. 생각해 보면 위험하기도 하겠습니다. 무슨 파일이 포함되었는지도 모르는 압축파일을 서버에 올려서 풀어버린다면 그 위험성은 상상하고도 남겠지요. 또한 내가 아닌 누군가가 나의 웹서버의 내용을 통째로 압축하여 가져가 버린다면...... 소름끼치는 상상이 될 수도 있겠지요. 그러나 구더기 무서워 장 못담그겠습니까? 서버상의 여러 개의 파일을 하나로 묶어서 다루어야 할 경우는 너무 많기때문에 TAR 아카이브를 다룰 수 있는 함수는 꼭 있어야 겠지요. 그리고 TAR 아카이브를 다룰 때 발생할 수 있는 여러 가지 위험성을 충분히 고려하여 사용하기만 한다면 별(?) 문제 없을 것입니다.
현재 PHP에서 일반적으로 웹상에서 여러 개의 파일을 압축하기 위해서는 exec() 또는 system()와 같은 함수와 리눅스에서 제공하는 tar 유틸리티를 이용하게 됩니다. 그러나 이러한 방법은 서버 상황에 따라 때로는 제대로 동작되지 않을 경우도 있으며 또한 윈도우 서버의 경우에는 해결방법이 될 수가 없습니다. 결국 가능한한 서버 환경에 관계없이 웹상에서 TAR 아카이브를 다루기 위해서는 TAR 아카이브를 직접 처리하는 것이 좋을 것 같습니다.
본인도 PHP에서 다중 파일 다운로드 클래스를 만들다보니 여러 개의 파일을 다운로드하기 위해서는 결국 여러 개의 파일을 하나의 파일로 묶은 후에 이 파일을 다운로드 받은 것이 가장 좋겠다는 생각까지는 하게 되었으나 현재 공개된 해결책으로는 위에서 언급한 리눅스의 tar 유틸리티를 이용하는 방법 외에는 눈에 띄는 것이 없었습니다. 그래서 인터넷을 검색하기 시작하였고 이를 통해 C로 작성된 tar 유틸리티의 소스 및 TAR 아카이브 구조에 관한 기술자료를 얻을 수 있었습니다. 이러한 자료를 통해 리눅스의 tar 유틸리티와 같은 기능을 수행하는 TAR 아카이브 클래스를 작성하게 되었습니다.
TAR 아카이브 관련 PHP 소스
TAR 관련 PHP 소스는 그리 흔한 것 같지 않습니다. 저도 관련 소스를 검색하여 보았으나 www.phpclasses.org에서 단 하나 발견하였을 뿐입니다. 본인도 이 소스를 참조하여 제 나름대로 TAR 아카이브를 다루는 클래스(hTarFile)를 작성하였습니다. 관심있는 분은 관련 소스들을 참조하시고 혹시 모르니 여러분도 인터넷을 더 검색해 보시기 바랍니다.
  • tar class
    Josh Barger
    joshb@npt.com
    http://www.phpclasses.org
  • hTarFile class
    Wookyung Hwang
    hwooky@phpclass.com
    http://www.phpclass.com
(추가) PEAR(PHP Extension and Application Repository)의 "File Formats" 패키지에 TAR 관련 PHP 소스 "Archive_Tar" 클래스가 있으니 http://pear.php.net 홈페이지를 참조바랍니다.
TAR 아카이브는 아니지만 zip 파일을 만들어 주는 소스가 보이네요. 소스는 TAR 아카이브를 다루는 것보다 훨씬 간단하구요. 실험해 보지는 않았지만 꽤 쓸모있는 소스인 것 같네요. 참조하세요.
  • zipfile class
    Eric Mueller
    eric@themepark.com
    http://www.zend.com/codex.php?id=696&single=1

Posted by 방글24