Use Zip Archive with PHP

PHP:8.0

在 PHP 中,要實作 Zip 壓縮和解壓縮檔案功能的話,可以透過 PHP ZipArchive 實作。

Basic Usage

基本使用

$zipname = 'test.zip';
$files = ['example.xlsx', 'example.xlsx'];

$zip = new ZipArchive();

// Open Zip file
$res = $zip->open($zipname, ZipArchive::CREATE);
if ($res) {
    // Add File
    foreach ($files as $file) {
        // zip file
        $fileName = $file;
        $zip->addFile($file, $fileName);
    }

    // Add Directory
    $zip->addEmptyDir('test-dir');
    $zip->addFile('example.xlsx', 'test-dir/example.xlsx');
}

// Close file
$zip->close();

On the Fly

有時候在實作下載功能時,不一定要存成檔案,可以以 Streaming 的形式實作。

// Create tmp
$file = tempnam("/tmp", "zip");
$zip = new ZipArchive;

$res = $zip->open($file, ZipArchive::OVERWRITE);
if ($res) {
    // Add Streaming String
    $zip->addFromString('file_name_within_archive.ext', $yourStringData);
    // Add File
    $zip->addFile('file_on_server.ext', 'second_file_name_within_archive.ext');
}
$zip->close();

header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile($file);
unlink($file);
Categories: PHP