W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
CodeIgniter 的 Zip 編碼類允許你創(chuàng)建 Zip 壓縮文檔,文檔可以被下載到你的桌面 或者 保存到某個(gè)文件夾里。
正如 CodeIgniter 中的其他類一樣,在你的控制器中使用 $this->load->library() 方法來(lái)初始化 Zip 編碼類:
$this->load->library('zip');
初始化之后,Zip 編碼類的對(duì)象就可以這樣訪問(wèn):
$this->zip
下面這個(gè)例子演示了如何壓縮一個(gè)文件,將其保存到服務(wù)器上的一個(gè)目錄下,并下載到你的桌面上。
$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');
classCI_Zip
$compression_level = 2
使用的壓縮等級(jí)。
壓縮等級(jí)的范圍為 0 到 9 ,9 為最高等級(jí),0 為禁用壓縮:
$this->zip->compression_level = 0;
add_data($filepath[, $data = NULL])
參數(shù):
返回類型: void
向 Zip 文檔中添加數(shù)據(jù),可以添加單個(gè)文件,也可以添加多個(gè)文件。
當(dāng)添加單個(gè)文件時(shí),第一個(gè)參數(shù)為文件名,第二個(gè)參數(shù)包含文件的內(nèi)容:
$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);
當(dāng)添加多個(gè)文件時(shí),第一個(gè)參數(shù)為包含 file => contents 這樣的鍵值對(duì)的數(shù)組,第二個(gè)參數(shù)被忽略:
$data = array(
'mydata1.txt' => 'A Data String!',
'mydata2.txt' => 'Another Data String!'
);
$this->zip->add_data($data);
如果你想要將你壓縮的數(shù)據(jù)組織到一個(gè)子目錄下,只需簡(jiǎn)單的將文件路徑包含到文件名中即可:
$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
上面的例子將會(huì)把 my_bio.txt 文件放到 personal 目錄下。
add_dir($directory)
參數(shù):
返回類型: void
允許你往壓縮文檔中添加一個(gè)目錄,通常這個(gè)方法是沒(méi)必要的,因?yàn)槟阃耆梢允褂?nbsp;$this->zip->add_data() 方法將你的數(shù)據(jù)添加到特定的目錄下。但是如果你想創(chuàng)建一個(gè)空目錄,你可以使用它:
$this->zip->add_dir('myfolder'); // Creates a directory called "myfolder"
read_file($path[, $archive_filepath = FALSE])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
允許你壓縮一個(gè)已經(jīng)存在于你的服務(wù)器上的文件。該方法的參數(shù)為一個(gè)文件路徑,Zip 類會(huì)讀取該文件的內(nèi)容并添加到壓縮文檔中:
$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 文檔中的文件保持它原有的目錄結(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 文件將會(huì)被放在 path/to/ 目錄下。
你也可以為新添加的文件指定一個(gè)新的名稱(包含文件路徑):
$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]])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
允許你壓縮一個(gè)已經(jīng)存在于你的服務(wù)器上的目錄(包括里面的內(nèi)容)。該方法的參數(shù)為目錄的路徑,Zip 類會(huì)遞歸的讀取它里面的內(nèi)容并重建成一個(gè) Zip 文檔。指定目錄下的所有文件以及子目錄下的文件都會(huì)被壓縮。 例如:
$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');
默認(rèn)情況下,Zip 文檔中會(huì)保留第一個(gè)參數(shù)中指定的目錄結(jié)構(gòu),如果你希望忽略掉這一大串的樹(shù)形目錄結(jié)構(gòu), 你可以將第二個(gè)參數(shù)設(shè)置為布爾值 FALSE 。例如:
$path = '/path/to/your/directory/';
$this->zip->read_dir($path, FALSE);
上面的代碼將會(huì)創(chuàng)建一個(gè) Zip 文檔,文檔里面直接是 "directory" 目錄,然后是它下面的所有的子目錄, 不會(huì)包含 /path/to/your 路徑在里面。
archive($filepath)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
向你的服務(wù)器指定目錄下寫入一個(gè) Zip 編碼文檔,該方法的參數(shù)為一個(gè)有效的目錄路徑,后加一個(gè)文件名, 確保這個(gè)目錄是可寫的(權(quán)限為 755 通常就可以了)。例如:
$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
download($filename = 'backup.zip')
參數(shù):
返回類型: void
從你的服務(wù)器上下載 Zip 文檔,你需要指定 Zip 文檔的名稱。例如:
$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
注解
在調(diào)用這個(gè)方法的控制器里不要顯示任何數(shù)據(jù),因?yàn)檫@個(gè)方法會(huì)發(fā)送多個(gè)服務(wù)器 HTTP 頭, 讓文件以二進(jìn)制的格式被下載。
get_zip()
返回: Zip file content
返回類型: string
返回使用 Zip 編碼壓縮后的文件數(shù)據(jù),通常情況你無(wú)需使用該方法,除非你要對(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();
clear_data()
返回類型: void
Zip 類會(huì)緩存壓縮后的數(shù)據(jù),這樣就不用在調(diào)用每個(gè)方法的時(shí)候重新壓縮一遍了。但是,如果你需要?jiǎng)?chuàng)建多個(gè) Zip 文檔,每個(gè) Zip 文檔有著不同的數(shù)據(jù),那么你可以在多次調(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"); // Read the file's contents
$this->zip->download('myphotos.zip');
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: