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');