首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP PclZip 庫實作檔案壓縮:純 PHP 無擴展依賴、支援建立/解壓/增刪

     編輯:PHP 相關知識

前言

PclZip 是純 PHP 實作的 ZIP 處理庫,無需安裝 ZipArchive 擴展,適合無法安裝擴展的虛擬主機環境。支援建立、解壓、列出、新增、刪除壓縮檔內容。

下載與引入

require_once 'pclzip/pclzip.lib.php'; // 路徑依實際調整

基本操作範例

1. 建立壓縮檔

<?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) . " 項";
?>

2. 使用陣列指定檔案 (更靈活)

$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);

3. 解壓縮

$list = $archive->extract('output_folder/');
if ($list === 0) die("Error: " . $archive->errorInfo(true));

4. 列出壓縮檔內容

$list = $archive->listContent();
print_r($list);

5. 新增檔案到既有壓縮檔

$list = $archive->add('new_file.txt');

6. 刪除壓縮檔內檔案

$list = $archive->delete('old_file.txt');

PclZip::create() 參數詳解

$archive->create($filelist, $options = []);
  • $filelist:字串 (逗號分隔) 或陣列 (含 filename、stored_filename 等屬性)
  • $options:PCLZIP_OPT_REMOVE_PATH 移除路徑前綴、PCLZIP_OPT_ADD_PATH 添加路徑前綴、PCLZIP_OPT_NO_COMPRESSION 不壓縮等

ThinkPHP 整合範例:資料庫備份壓縮

<?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));
    }
}
?>

效能與限制

項目PclZipZipArchive
依賴無 (純 PHP)需安裝擴展
速度較慢快 (C 實作)
記憶體較高較低
功能完整度基本足夠完整 (加密、註解、分卷等)

現代替代:ZipStream-PHP (串流壓縮、不落地)

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(); // 直接輸出至瀏覽器下載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved