Zip 인코딩 클래스¶
CodeIgniter의 Zip 인코딩 클래스를 사용하면 Zip 아카이브를 만들 수 있습니다. 아카이브는 데스크톱으로 다운로드하거나 디렉터리에 저장할 수 있습니다.
Zip 인코딩 클래스 사용¶
클래스 초기화¶
CodeIgniter의 대부분의 클래스와 마찬가지로 Zip 클래스는 컨트롤러에서 $this->load->library 함수를 사용하여 초기화합니다:
$this->load->library('zip');
로드되면 다음을 사용하여 Zip 라이브러리 객체에 접근할 수 있습니다:
$this->zip
사용 예시¶
이 예시는 파일을 압축하고, 서버의 폴더에 저장한 다음, 데스크톱으로 다운로드하는 방법을 보여줍니다.
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
// Zip 파일을 서버의 폴더에 저장합니다. 이름을 "my_backup.zip"으로 지정합니다.
$this->zip->archive('/path/to/directory/my_backup.zip');
// 데스크톱으로 파일을 다운로드합니다. 이름을 "my_backup.zip"으로 지정합니다.
$this->zip->download('my_backup.zip');
클래스 레퍼런스¶
- class CI_Zip¶
- $compression_level = 2
사용할 압축 수준입니다.
0에서 9까지 범위를 지정할 수 있으며, 9가 가장 높고 0은 사실상 압축을 비활성화합니다:
$this->zip->compression_level = 0;
- add_data($filepath[, $data = NULL])¶
- 매개변수:
$filepath (
mixed) – 단일 파일 경로 또는 파일 => 데이터 쌍의 배열$data (
array) – 파일 내용 ($filepath가 배열인 경우 무시)
- 반환 형식:
void
Zip 아카이브에 데이터를 추가합니다. 단일 파일 모드와 여러 파일 모드 모두에서 작동할 수 있습니다.
단일 파일을 추가할 때, 첫 번째 매개변수에는 파일에 지정할 이름이 포함되어야 하고 두 번째 매개변수에는 파일 내용이 포함되어야 합니다:
$name = 'mydata1.txt'; $data = 'A Data String!'; $this->zip->add_data($name, $data); $name = 'mydata2.txt'; $data = 'Another Data String!'; $this->zip->add_data($name, $data);
여러 파일을 추가할 때, 첫 번째 매개변수에는 파일 => 내용 쌍이 포함되어야 하고 두 번째 매개변수는 무시됩니다:
$data = array( 'mydata1.txt' => 'A Data String!', 'mydata2.txt' => 'Another Data String!' ); $this->zip->add_data($data);
압축된 데이터를 하위 디렉터리로 구성하려면 파일 이름의 일부로 경로를 포함하면 됩니다:
$name = 'personal/my_bio.txt'; $data = 'I was born in an elevator...'; $this->zip->add_data($name, $data);
위 예시에서 my_bio.txt는 personal이라는 폴더 안에 저장됩니다.
- add_dir($directory)¶
- 매개변수:
$directory (
mixed) – 디렉터리 이름 문자열 또는 여러 디렉터리의 배열
- 반환 형식:
void
디렉터리를 추가할 수 있습니다. 일반적으로
$this->zip->add_data()를 사용할 때 데이터를 디렉터리에 넣을 수 있으므로 이 메소드는 불필요하지만, 빈 디렉터리를 만들려면 다음과 같이 할 수 있습니다:$this->zip->add_dir('myfolder'); // "myfolder"라는 디렉터리를 만듭니다.
- read_file($path[, $archive_filepath = FALSE])¶
- 매개변수:
$path (
string) – 파일 경로$archive_filepath (
mixed) – 새 파일 이름/경로(문자열) 또는 원본 파일 경로 유지 여부(불리언)
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
서버 어딘가에 이미 존재하는 파일을 압축할 수 있습니다. 파일 경로를 제공하면 zip 클래스가 파일을 읽고 아카이브에 추가합니다:
$path = '/path/to/photo.jpg'; $this->zip->read_file($path); // 데스크톱으로 파일을 다운로드합니다. 이름을 "my_backup.zip"으로 지정합니다. $this->zip->download('my_backup.zip');
Zip 아카이브에 파일의 디렉터리 구조를 유지하려면 두 번째 매개변수에 TRUE (불리언)를 전달합니다. 예시:
$path = '/path/to/photo.jpg'; $this->zip->read_file($path, TRUE); // 데스크톱으로 파일을 다운로드합니다. 이름을 "my_backup.zip"으로 지정합니다. $this->zip->download('my_backup.zip');
위 예시에서 photo.jpg는 path/to/ 디렉터리에 저장됩니다.
추가되는 파일의 새 이름(경로 포함)을 즉시 지정할 수도 있습니다:
$path = '/path/to/photo.jpg'; $new_path = '/new/path/some_photo.jpg'; $this->zip->read_file($path, $new_path); // /new/path/some_photo.jpg가 포함된 ZIP 아카이브를 다운로드합니다. $this->zip->download('my_archive.zip');
- read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]])¶
- 매개변수:
$path (
string) – 디렉터리 경로$preserve_filepath (
bool) – 원본 경로 유지 여부$root_path (
string) – 아카이브 디렉터리에서 제외할 경로 부분
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
서버 어딘가에 이미 존재하는 디렉터리(및 그 내용)를 압축할 수 있습니다. 디렉터리 경로를 제공하면 zip 클래스가 재귀적으로 읽고 Zip 아카이브로 다시 만듭니다. 제공된 경로 안에 있는 모든 파일이 인코딩되고, 그 안에 있는 모든 하위 디렉터리도 마찬가지입니다. 예시:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path); // 데스크톱으로 파일을 다운로드합니다. 이름을 "my_backup.zip"으로 지정합니다. $this->zip->download('my_backup.zip');
기본적으로 Zip 아카이브는 첫 번째 매개변수에 나열된 모든 디렉터리를 zip 안에 넣습니다. 대상 디렉터리 앞의 트리를 무시하려면 두 번째 매개변수에 FALSE(불리언)를 전달할 수 있습니다. 예시:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path, FALSE);
이렇게 하면 내부에 “directory”라는 디렉터리가 있는 ZIP이 생성되며, 그 안에 모든 하위 디렉터리가 올바르게 저장되지만 경로의 /path/to/your 부분은 포함되지 않습니다.
- archive($filepath)¶
- 매개변수:
$filepath (
string) – 대상 zip 아카이브 경로
- 반환:
성공 시 TRUE, 실패 시 FALSE
- 반환 형식:
bool
Zip 인코딩된 파일을 서버의 디렉터리에 씁니다. 파일 이름으로 끝나는 유효한 서버 경로를 제출합니다. 디렉터리가 쓰기 가능한지 확인하세요(755가 일반적으로 적합). 예시:
$this->zip->archive('/path/to/folder/myarchive.zip'); // myarchive.zip이라는 파일을 만듭니다.
- download($filename = 'backup.zip')¶
- 매개변수:
$filename (
string) – 아카이브 파일 이름
- 반환 형식:
void
서버에서 Zip 파일을 다운로드합니다. zip 파일에 지정할 이름을 전달해야 합니다. 예시:
$this->zip->download('latest_stuff.zip'); // 파일 이름이 "latest_stuff.zip"이 됩니다.
참고
이 메소드를 호출하는 컨트롤러에서는 어떤 데이터도 표시하지 마세요. 다운로드가 발생하고 파일이 바이너리로 처리되도록 하는 다양한 서버 헤더를 전송하기 때문입니다.
- get_zip()¶
- 반환:
Zip 파일 내용
- 반환 형식:
string
Zip 압축 파일 데이터를 반환합니다. 일반적으로 데이터로 특별한 작업을 수행하려는 경우가 아니면 이 메소드가 필요하지 않습니다. 예시:
$name = 'my_bio.txt'; $data = 'I was born in an elevator...'; $this->zip->add_data($name, $data); $zip_file = $this->zip->get_zip();
- clear_data()¶
- 반환 형식:
void
Zip 클래스는 zip 데이터를 캐시하므로 위의 각 메소드에 대해 Zip 아카이브를 다시 컴파일할 필요가 없습니다. 그러나 각각 다른 데이터를 가진 여러 Zip 아카이브를 만들어야 하는 경우 호출 사이에 캐시를 지울 수 있습니다. 예시:
$name = 'my_bio.txt'; $data = 'I was born in an elevator...'; $this->zip->add_data($name, $data); $zip_file = $this->zip->get_zip(); $this->zip->clear_data(); $name = 'photo.jpg'; $this->zip->read_file("/path/to/photo.jpg"); // 파일 내용을 읽습니다. $this->zip->download('myphotos.zip');