소개
RAR(Roshal Archive)는 오류 복구(error recovery)와 파일 분할(file spanning)을 지원하는 파일 압축 형식입니다. PHP는 .RAR 파일을 IO 스트림으로 다룰 수 있도록 지원하며, rar://는 바로 이 RAR 스트림을 위한 스트림 래퍼(stream wrapper)입니다.
rar:// 래퍼는 RAR 아카이브의 상대 경로 또는 절대 경로(URL 인코딩 필요)를 입력값으로 받습니다. 여기에 선택적으로 별표(*) 또는 샵(#) 기호를 붙일 수 있고, 아카이브 내부에 저장된 항목 이름(URL 인코딩 필요)도 함께 지정할 수 있습니다. 이 래퍼를 통해 파일뿐만 아니라 디렉터리도 열 수 있습니다.
만약 샵 기호(#)와 항목 이름 부분이 생략되면 아카이브의 루트(root)가 표시됩니다. 특히 RecursiveDirectoryIterator와 함께 이 래퍼를 사용할 때는 반드시 URL에 샵 기호가 포함되어야 한다는 점에 유의해야 합니다.
또한 이 래퍼는 기본적으로 활성화되어 있지 않습니다. 사용하려면 PECL(PHP Extension Community Library)에서 제공하는 rar 확장 모듈을 먼저 설치해야 합니다.
사용법
rar://<url encoded archive name>[*][#[<url encoded entry name>]]
위 문법에서 각 구성 요소는 다음과 같은 의미를 가집니다.
- <url encoded archive name>: 열고자 하는 RAR 아카이브의 경로 (URL 인코딩 필수)
- *: 선택 사항으로, 아카이브 전체를 대상으로 함을 의미
- #<url encoded entry name>: 선택 사항으로, 아카이브 내 특정 항목(파일 또는 디렉터리)을 지정
RAR 컨텍스트 옵션
rar:// 래퍼를 사용할 때 스트림 컨텍스트를 통해 다음 옵션들을 설정할 수 있습니다.
| open_password | 아카이브의 헤더(header)가 암호화되어 있는 경우, 이를 해제하기 위해 사용하는 비밀번호입니다. |
|---|---|
| file_password | 개별 파일이 암호화되어 있는 경우 사용하는 비밀번호입니다. 단, 헤더까지 함께 암호화되어 있다면 이 옵션은 무시되며 open_password가 우선적으로 적용됩니다. |
| volume_callback | 분할된 아카이브에서 누락된 볼륨(missing volume)의 경로를 찾기 위해 호출되는 콜백(callback) 함수입니다. |