PclZip 是純 PHP 實作的 ZIP 處理庫,無需安裝 ZipArchive 擴展,適合無法安裝擴展的虛擬主機環境。支援建立、解壓、列出、新增、刪除壓縮檔內容。
pclzip.lib.phprequire_once 'pclzip/pclzip.lib.php'; // 路徑依實際調整
<?php
$zipFile = 'backup.zip';
$archive = new PclZip($zipFile);
// 壓縮多個檔案與目錄 (字串格式,逗號分隔)
$list = $archive->create('file.txt, data/text.txt, folder');
if ($list === 0) {
die("Error: " . $archive->errorInfo(true));
}
echo "壓縮成功,共 " . count($list) . " 項";
?>
$files = [
['filename' => 'file.txt', 'stored_filename' => 'file.txt'],
['filename' => 'data/text.txt', 'stored_filename' => 'text.txt'],
['filename' => 'folder', 'stored_filename' => 'folder'], // 目錄遞迴
];
$list = $archive->create($files);
$list = $archive->extract('output_folder/');
if ($list === 0) die("Error: " . $archive->errorInfo(true));
$list = $archive->listContent();
print_r($list);
$list = $archive->add('new_file.txt');
$list = $archive->delete('old_file.txt');
$archive->create($filelist, $options = []);
$filelist:字串 (逗號分隔) 或陣列 (含 filename、stored_filename 等屬性)$options:PCLZIP_OPT_REMOVE_PATH 移除路徑前綴、PCLZIP_OPT_ADD_PATH 添加路徑前綴、PCLZIP_OPT_NO_COMPRESSION 不壓縮等<?php
// ThinkPHP 3.x Action 方法
public function backup() {
// 1. 匯出 SQL 到檔案 (略)
$sqlFile = './data/backup_' . date('YmdHis') . '.sql';
// ... export logic ...
// 2. 壓縮
import('ORG.Util.PclZip');
$archive = new PclZip('./data/backup_' . date('ymd') . '.zip');
$result = $archive->create($sqlFile);
if ($result !== 0 && file_exists($sqlFile)) {
@unlink($sqlFile); // 刪除原始 SQL 檔
$this->success('備份並壓縮成功');
} else {
$this->error('壓縮失敗: ' . $archive->errorInfo(true));
}
}
?>
| 項目 | PclZip | ZipArchive |
|---|---|---|
| 依賴 | 無 (純 PHP) | 需安裝擴展 |
| 速度 | 較慢 | 快 (C 實作) |
| 記憶體 | 較高 | 較低 |
| 功能完整度 | 基本足夠 | 完整 (加密、註解、分卷等) |
composer require maennchen/zipstream-php
use ZipStream\ZipStream;
$zip = new ZipStream('download.zip');
$zip->addFile('file1.txt', fopen('file1.txt', 'r'));
$zip->addFileFromPath('folder/file2.txt');
$zip->finish(); // 直接輸出至瀏覽器下載