# Zip 編碼類
CodeIgniter 的 Zip 編碼類允許你創建 Zip 壓縮文檔,文檔可以被下載到你的桌面 或者 保存到某個文件夾里。
* [使用 Zip 編碼類](http://codeigniter.org.cn/user_guide/libraries/zip.html#id1)
* [初始化類](http://codeigniter.org.cn/user_guide/libraries/zip.html#id2)
* [使用示例](http://codeigniter.org.cn/user_guide/libraries/zip.html#id3)
* [類參考](http://codeigniter.org.cn/user_guide/libraries/zip.html#id4)
## [使用 Zip 編碼類](http://codeigniter.org.cn/user_guide/libraries/zip.html#id5)
### [初始化類](http://codeigniter.org.cn/user_guide/libraries/zip.html#id6)
正如 CodeIgniter 中的其他類一樣,在你的控制器中使用?$this->load->library()?方法來初始化 Zip 編碼類:
~~~
$this->load->library('zip');
~~~
初始化之后,Zip 編碼類的對象就可以這樣訪問:
~~~
$this->zip
~~~
### [使用示例](http://codeigniter.org.cn/user_guide/libraries/zip.html#id7)
下面這個例子演示了如何壓縮一個文件,將其保存到服務器上的一個目錄下,并下載到你的桌面上。
~~~
$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');
~~~
## [類參考](http://codeigniter.org.cn/user_guide/libraries/zip.html#id8)
classCI_Zip
$compression_level = 2
使用的壓縮等級。
壓縮等級的范圍為 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);
~~~
上面的例子將會把 my_bio.txt 文件放到 personal 目錄下。
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);
~~~
上面的代碼將會創建一個 Zip 文檔,文檔里面直接是 "directory" 目錄,然后是它下面的所有的子目錄, 不會包含?/path/to/your?路徑在里面。
archive($filepath)
參數:
* **$filepath**?(string) -- Path to target zip archive
返回: TRUE on success, FALSE on failure
返回類型: bool
向你的服務器指定目錄下寫入一個 Zip 編碼文檔,該方法的參數為一個有效的目錄路徑,后加一個文件名, 確保這個目錄是可寫的(權限為 755 通常就可以了)。例如:
~~~
$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"
~~~
注解
在調用這個方法的控制器里不要顯示任何數據,因為這個方法會發送多個服務器 HTTP 頭, 讓文件以二進制的格式被下載。
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 文檔有著不同的數據,那么你可以在多次調用之間把緩存清除掉。例如:
~~~
$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');
~~~
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量