Zip 인코딩 Zip Encoding Class¶
Zip 압축 클래스를 이용하시면 Zip으로 압축된 파일을 만들 수 있습니다. 압축된것은 데스크탑으로 다운로드 할 수도 있고 디렉토리로 저장할 수도 있습니다.
Zip 인코딩 클래스 사용하기 Using the Zip Encoding Class¶
클래스 초기화 Initializing the Class¶
다른 대부분의 클래스들처럼 Zip 클래스도 컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:
$this->load->library('zip');
일단 로드되면, Zip 라이브러리 객체는 다음과 같이 사용 가능합니다:
$this->zip
사용 예제 Usage Example¶
이 예제는 어떻게 파일을 압축하고, 서버의 폴더에 저장하고, 데스크탑에 다운로드하는지를 보여줍니다.
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
// Write the zip file to a folder on your server. Name it "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');
// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');
클래스 레퍼런스 Class Reference¶
- class CI_Zip¶
- $compression_level = 2
The compression level to use.
0 에서 9 사이에서 사용할 수 있습니다, 9 가 가장 높은, 그리고 0 이 효과가 적은 압축입니다:
$this->zip->compression_level = 0;
- add_data($filepath[, $data = NULL])¶
인수: - $filepath (mixed) – A single file path or an array of file => data pairs
- $data (array) – File contents (ignored if $filepath is an array)
반환형: 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);
여러 파일을 추가 할 때, 첫 번째 매개 변수는 file => contents 을 포함해야 합니다. 두 번째 매개 변수는 무시됩니다:
$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);
위 예제에서는personal 라는 폴더안에 my_bio.txt 파일이 존재하게 됩니다.
- add_dir($directory)¶
인수: - $directory (mixed) – Directory name string or an array of multiple directories
반환형: void
디렉토리를 추가할 때 사용합니다. 일반적으로는 $this->zip->add_data() 함수에서 데이터를 하위 디렉토리에 놓을 수 있기 때문에 사용할 필요가 없지만, 빈 폴더를 만들려면 사용해야겠지요:
$this->zip->add_dir('myfolder'); // Creates a directory called "myfolder"
- read_file($path[, $archive_filepath = FALSE])¶
인수: - $path (string) – Path to file
- $archive_filepath (mixed) – New file name/path (string) or (boolean) whether to maintain the original filepath
반환값: TRUE on success, FALSE on failure
반환형: bool
서버에 이미 존재하는 파일을 압축할 때 사용합니다. 파일경로를 넘겨주면 zip 클래스는 그 파일을 읽은후 압축파일에 추가합니다:
$path = '/path/to/photo.jpg'; $this->zip->read_file($path); // Download the file to your desktop. Name it "my_backup.zip" $this->zip->download('my_backup.zip');
만약 Zip 으로 압축된 파일의 디렉토리 구조를 유지하도록 하고 싶다면, 두 번째 파라미터를TRUE 로 설정합니다. 예제:
$path = '/path/to/photo.jpg'; $this->zip->read_file($path, TRUE); // Download the file to your desktop. Name it "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); // Download ZIP archive containing /new/path/some_photo.jpg $this->zip->download('my_archive.zip');
- read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]])¶
인수: - $path (string) – Path to directory
- $preserve_filepath (bool) – Whether to maintain the original path
- $root_path (string) – Part of the path to exclude from the archive directory
반환값: TRUE on success, FALSE on failure
반환형: bool
서버에 이미 존재하는 폴더 및 폴더내용을 압축할 때 사용합니다. 폴더 경로를 넘겨주면 zip 클래스는 재귀적으로 읽어들인다음 Zip 으로 압축합니다. 모든 하위 폴더 및 파일들이 압축됩니다. 예제:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path); // Download the file to your desktop. Name it "my_backup.zip" $this->zip->download('my_backup.zip');
기본적으로 Zip으로 압축된 결과에는 첫 번째 파라미터의 모든 경로가 포함됩니다. 만약 압축하려는 폴더의 상위 경로명을 포함하지 않으려면 두 번째 파라미터를 FALSE 로 두세요 예제:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path, FALSE);
이렇게 하면 /path/to/your 경로는 압축파일에서 빠지게 됩니다.
- archive($filepath)¶
인수: - $filepath (string) – Path to target zip archive
반환값: TRUE on success, FALSE on failure
반환형: bool
Zip 으로 압축된 파일을 서버의 디렉토리에 생성합니다. 유효한 서버경로와 함께 압축파일의 이름을 넘겨줍니다. 디렉토리는 쓰기 가능해야 합니다(666 이나 777 이면 OK). 예제:
$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
- download($filename = 'backup.zip')¶
인수: - $filename (string) – Archive file name
반환형: void
서버로부터 Zip 파일을 다운로드 하도록 해줍니다. 이 함수에는 생성될 zip 파일명을 넘겨줘야 합니다. 예제:
$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
Note
이 함수를 호출하는 컨트롤러의 함수에서는 어떤 데이터도 표시(display)하게 해서는 안됩니다. 만약 그럴경우 여러가지 서버 헤더가 전송되게 되므로 다운로드가 실행되게 되며 파일은 바이너리로 취급되게 됩니다.
- get_zip()¶
반환값: Zip file content 반환형: 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 파일을 생성하고자 한다면, 각각마다 캐시를 제거(clear)할 수 있습니다. 예제:
$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"); // Read the file's contents $this->zip->download('myphotos.zip');