Zip Encoding 類別
CodeIgniter's Zip Encoding 類別云許您建立 ZIP 壓縮檔案。 您可以下載壓縮檔案到您電腦桌面或者指定的資料夾。
Initializing the 類別
使用方式就像其他 CodeIgniter 類別一樣,在控制器(Controller)使用此類別 $this->load->library 函式:
$this->load->library('zip');
經過系統載入,您就可以使用 Zip 物件函式: $this->zip
範例
此範例教您如何壓縮一個檔案,將其檔案存放入您指定的伺服器資料夾,下載此檔案到使用者端電腦桌面。.
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name,$data);
// 將檔案壓縮到您的伺服器,指定名稱為 "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');
// 下載到您的桌面,指定名稱為 "my_backup.zip"
$this->zip->download('my_backup.zip');
函數參考
$this->zip->add_data()
新增資料到 ZIP 壓縮檔案,第一個參數請放入您想要的檔案名稱,第二個參數請放入檔案內容:
$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name,$data);
允許您多次呼叫此函數來增加多個檔案。參考範例:
$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);
$this->zip->download('my_backup.zip');
如果您想要將壓縮後的資料放入子目錄,請把路徑也加入到檔案名稱的一部分:
$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name,$data);
上面的例子是將 my_bio.txt 檔案放到一個叫做 personal 的子目錄。
$this->zip->add_dir()
允許您新增一個目錄,通常這個函數不是必須的,因為當你使用 $this->zip->add_data(),可以把你的數據放進目錄裡,但是如果你想要創建一個空目錄的話你也可以這樣做。參考範例:
$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"
$this->zip->read_file()
允許您壓縮一個存在您電腦裡面的檔案,請提供檔案路徑,函數會去讀取該檔案,並且增加到壓縮檔案裡:
$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');
假如您想要此壓縮檔案保留原本的目錄架構,請將第二個參數設定為 TRYE,參考範例:
$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/
$this->zip->read_dir()
允許您壓縮一個存在您電腦裡面的目錄,請提供該目錄路徑讓函數可以遞迴讀取該目錄底下子目錄,所有的檔案以及該目錄底下子目錄都會被加入到壓縮檔案,參考範例:
$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');
By default the Zip archive will place all directories listed in the first parameter inside the zip. If you want the tree preceding the target folder to be ignored you can pass FALSE (boolean) in the second parameter. Example:
$path = '/path/to/your/directory/';
$this->zip->read_dir($path, FALSE);
This will create a ZIP with the folder "directory" inside, then all sub-folders stored correctly inside that, but will not include the folders /path/to/your.
$this->zip->archive()
將 ZIP 壓縮檔案放入到您電腦指定目錄,請提供一個正確目錄路徑,確保該目錄是可以寫入的(666 或 777 通常都是可以的),參考範例:
$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
$this->zip->download()
此函數必須提供您想要的檔案名稱,以便從您電腦下載壓縮檔案,參考範例:
$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
注意: 當使用此函數時,請不要在控制器裡面加入任何輸出文字或者是 html 語法,以便可以讓檔案以二進制方式下載。
$this->zip->get_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()
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"); // Read the file's contents
$this->zip->download('myphotos.zip');