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

PHP 線上解壓 ZIP 檔案完整實作指南

     編輯:PHP 綜合知識

前言

在 Web 開發中,使用者上傳壓縮檔並自動解壓是常見需求。PHP 內建的 Zlib 擴展雖能處理 gzip,但無法直接操作 ZIP 格式。本文介紹一種經典做法:結合檔案上傳與伺服器端命令列工具,實現 ZIP 自動解壓。

核心思路

利用 PHP 的 exec() 或 system() 執行系統指令,呼叫 pkunzip.exe(或 Linux 下的 unzip)完成解壓縮。流程如下:

  1. 前端表單上傳 ZIP 檔。
  2. 後端接收並儲存暫存檔。
  3. 判斷副檔名為 .zip 或 .ZIP。
  4. 呼叫解壓程式,完成後刪除原壓縮檔。

完整程式碼範例

1. 上傳表單 upload.php

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>ZIP 上傳解壓示範</title></head>
<body>
<form enctype="multipart/form-data" action="upsave.php" method="post">
  <p>請選擇 *.ZIP 檔案,上傳後將自動解壓縮:</p>
  <input type="file" name="MyFile" size="50">
  <br><br>
  <input type="submit" value="上傳">
  <input type="reset" value="重填">
</form>
</body>
</html>

2. 處理邏輯 upsave.php

<?php
// 1. 接收上傳檔
$filename = basename($_FILES['MyFile']['name']);
$tmp_name = $_FILES['MyFile']['tmp_name'];

if (!move_uploaded_file($tmp_name, $filename)) {
    die('檔案上傳失敗,請檢查目錄寫入權限。');
}

// 2. 判斷是否為 ZIP
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if ($ext === 'zip') {
    // Windows 環境需放置 pkunzip.exe 於同目錄
    // Linux 環境請改用: unzip -o {$filename}
    $cmd = "pkunzip.exe -e {$filename}";
    exec($cmd, $output, $retVar);

    if ($retVar === 0) {
        unlink($filename); // 解壓成功刪除原檔
        echo "解壓完成!";
    } else {
        echo "解壓失敗,錯誤代碼:{$retVar}";
    }
} else {
    echo "非 ZIP 檔案,已保留原檔:{$filename}";
}
?>

部署注意事項

  • 目錄權限:上傳目錄需具備寫入權限(Linux 建議 755 或 775,擁有者為 Web 使用者)。
  • 解壓工具:
    • Windows:須將 pkunzip.exe 放在網站根目錄或系統 PATH 內。
    • Linux/Unix:系統通常內建 unzip,直接呼叫即可。
  • 安全性:
    • 嚴格驗證檔案副檔名與 MIME 類型。
    • 使用 escapeshellarg() 過濾檔名,防止命令注入。
    • 限制上傳檔案大小(php.ini 的 upload_max_filesize 與 post_max_size)。

現代替代方案

PHP 5.2+ 內建 ZipArchive 類別,無需外部程式即可解壓,跨平台、更安全:

<?php
$zip = new ZipArchive;
if ($zip->open($filename) === TRUE) {
    $zip->extractTo('./extracted/');
    $zip->close();
    unlink($filename);
    echo '解壓成功';
} else {
    echo '無法開啟 ZIP 檔';
}
?>

建議新專案優先使用 ZipArchive,僅在舊環境無法安裝擴展時採用命令列備案。

總結

透過「上傳 → 判斷 → 呼叫外部工具 → 清理」四步驟,即可快速實現 ZIP 線上解壓。若專案允許,強烈建議改用 ZipArchive 以提升可維護性與安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved