Zip 編碼類
CodeIgniter的zip編碼類允許你創(chuàng)建ZIP壓縮文檔。文檔可以保存在你的桌面或者某個(gè)文件夾里
初始化
與其他CodeIgniter里的類一樣,ZIP類在控制器里完成初始化工作,函數(shù):$this->load->library
$this->load->library('zip');
一旦加載,ZIP庫對(duì)象可以用$this->zip來使用
使用樣例
這個(gè)例子演示了如何壓縮一個(gè)文件并保存到你服務(wù)器一個(gè)文件夾,然后下載到你的桌面上。
$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
// 在你的服務(wù)器的文件夾里寫.zip文件。命名為"my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');
// 下載此文件到桌面,命名為"my_backup.zip"
$this->zip->download('my_backup.zip');
函數(shù)參考
$this->zip->add_data()
添加數(shù)據(jù)進(jìn)zip文件里. 第一個(gè)參數(shù)是文件名, 第二個(gè)參數(shù)是你要添加的數(shù)據(jù)的字符串格式:
$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
允許你多次調(diào)用這個(gè)函數(shù)按順序的添加若干個(gè)文件到你的存檔。例子:
$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);
或者你可以使用一個(gè)數(shù)組來傳遞多個(gè)文件(的值):
$data = array(
????????????????'mydata1.txt' => 'A Data String!',
????????????????'mydata2.txt' => 'Another Data String!'
????????????);
$this->zip->add_data($data);
$this->zip->download('my_backup.zip');
如果你希望將壓縮后的數(shù)據(jù)放入子文件夾內(nèi),請(qǐng)把路徑作為文件名的一部分包含進(jìn)去:
$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
上面的例子將放置 my_bio.txt 到一個(gè)叫personal的文件夾內(nèi)。
$this->zip->add_dir()
允許你添加一個(gè)目錄。通常這個(gè)函數(shù)是不必要的,因?yàn)楫?dāng)你使用$this->zip->add_data(), 可以把你的數(shù)據(jù)放進(jìn)目錄里,但是如果你想要?jiǎng)?chuàng)建一個(gè)空目錄的話你也可以這樣做。例子:
$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"
$this->zip->read_file()
允許你壓縮一個(gè)服務(wù)器某處存在的文件。提供一個(gè)文件路徑,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');
如果你想壓縮文檔保持原來文件的目錄結(jié)構(gòu),可以把第二個(gè)參數(shù)設(shè)置為 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/
$this->zip->read_dir()
允許你壓縮一個(gè)服務(wù)器某處存在的文件夾(以及它里面的文件和子文件夾)。提供一個(gè)文件夾路徑,zip類將遞歸讀取它并重新創(chuàng)建添加到存檔。 你所提供的路徑下面的所有文件都會(huì)被壓縮進(jìn)來,也包括所有子文件夾。例如:
$path = '/path/to/your/directory/';
$this->zip->read_dir($path);
// 將文件下載到你的桌面上,命名為 "my_backup.zip"
$this->zip->download('my_backup.zip');
默認(rèn)Zip文件會(huì)把第一個(gè)參數(shù)的完整文件夾路徑保存到Zip文件里。如果你想忽略目標(biāo)路徑之前的文件夾結(jié)構(gòu),你可以傳遞 FALSE (布爾值) 到第二個(gè)參數(shù)。 例如:
$path = '/path/to/your/directory/';
$this->zip->read_dir($path, FALSE);
這將創(chuàng)建一個(gè)包括"directory"在內(nèi)的ZIP文件, 所有的子文件夾被正確地保存在里面, 但是不包括此文件夾 /path/to/your.
$this->zip->archive()
將Zip壓縮文件寫入服務(wù)器的一個(gè)目錄下。請(qǐng)?zhí)峤灰粋€(gè)有效的服務(wù)器路徑,以文件名作為結(jié)尾,并確保那個(gè)目錄是可寫的(權(quán)限為666或者777都可以)。例如:
$this->zip->archive('/path/to/folder/myarchive.zip'); // 創(chuàng)建一個(gè)名為 myarchive.zip 的文件
$this->zip->download()
本函數(shù)將使用戶從你的服務(wù)器上下載一個(gè)Zip文件。你必須把你想要使用的文件名作為參數(shù)傳遞給函數(shù)。例如:
$this->zip->download('latest_stuff.zip'); // 文件將被命名為"latest_stuff.zip"
說明:? 在調(diào)用本函數(shù)的控制器中不要顯示任何數(shù)據(jù),因?yàn)楸竞瘮?shù)將發(fā)送多個(gè)服務(wù)器header,從而使文件以二進(jìn)制的形式被下載。
$this->zip->get_zip()
返回經(jīng)過Zip壓縮后的文件數(shù)據(jù)。通常情況下你不需要用到本函數(shù),除非你想對(duì)數(shù)據(jù)做特殊處理。例如:
$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編碼類會(huì)對(duì)你的zip數(shù)據(jù)進(jìn)行緩存,因此,調(diào)用上面的各個(gè)函數(shù)時(shí),你不需要每次都重新建立Zip文件。然而,如果你要?jiǎng)?chuàng)建多個(gè)有著各自不同數(shù)據(jù)的Zip文件的話,你可以在調(diào)用期間清理掉緩存。例如:
$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"); // 讀取文件內(nèi)容
$this->zip->download('myphotos.zip');
?