CodeIgniter 內建 Zip 類提供零依賴的目錄打包下載功能,本文說明載入方式、核心方法與自動載入配置技巧。
<?php
$this->load->library('zip'); // 載入 Zip 類
?>
<?php
$autoload['libraries'] = array('zip', 'database', 'session'); // 加入 zip
?>
⚠️ 若出現「Call to undefined method」錯誤,90% 是自動載入未生效,請檢查 autoload.php 並重啟服務驗證。
| 方法 | 說明 | 參數 |
|---|---|---|
read_dir($path, $preserve_dirs = true) | 遞迴讀取目錄加入壓縮包 | $preserve_dirs=false 可扁平化結構 |
download($filename) | 輸出壓縮檔供瀏覽器下載 | 自動送出 Content-Disposition header |
archive($filepath) | 儲存壓縮檔到伺服器路徑 | 需確保目錄可寫入 |
<?php
class Backup extends CI_Controller {
public function download_full_site() {
$this->load->library('zip');
$rootPath = $_SERVER['DOCUMENT_ROOT']; // 目標目錄
// FALSE 表示不保留絕對路徑結構,避免解壓時路徑過深
$this->zip->read_dir($rootPath, FALSE);
// 直接觸發瀏覽器下載
$this->zip->download('my_backup_' . date('Ymd_His') . '.zip');
}
}
?>
memory_limit,建議分批處理或調大 php.ini 設定。read_dir() 不支援排除規則,需自行遍歷 RecursiveDirectoryIterator 過濾後用 add_data() 逐個加入。archive() 時)。善用 CI 內建 Zip 類,快速實現備份下載、資料匯出等常見需求,無需額外 Composer 套件。