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