How to create a zip file using PHP

Viewed 117089

I am trying to save files from one folder to another. zip folder placed in different directory. And I have written the following codes:

archive.php

<?php
    $zip = new ZipArchive();
    $zip->open('example.zip',  ZipArchive::CREATE);
    $srcDir = "/home/sam/uploads/";
    $files= scandir($srcDir);
    //var_dump($files);
    unset($files[0],$files[1]);
    foreach ($files as $file) {
        $zip->addFile("{$file}");    
    }
    $zip->close();
?>

But sadly I am not able to create the .zip folder. Is there any step I missed?

6 Answers

Create a new zip file

$zip = new ZipArchive;
if ($zip->open('test_new.zip', ZipArchive::CREATE) === TRUE)
{
    // Add files to the zip file
    $zip->addFile('test.txt');
    $zip->addFile('test.pdf');
 
    // Add random.txt file to zip and rename it to newfile.txt
    $zip->addFile('random.txt', 'newfile.txt');
 
    // Add a file new.txt file to zip using the text specified
    $zip->addFromString('new.txt', 'text to be added to the new.txt file');
 
    // All files are added, so close the zip file.
    $zip->close();
}

Overwrite an existing zip file

(When using OVERWRITE, the file must already exist. If it doesn't exist yet, the operation will fail.)

$zip = new ZipArchive;
if ($zip->open('test_overwrite.zip', ZipArchive::OVERWRITE) === TRUE)
{
    // Add file to the zip file
    $zip->addFile('test.txt');
    $zip->addFile('test.pdf');
 
    // All files are added, so close the zip file.
    $zip->close();
}

Create a new zip file and add files to be inside a folder

$zip = new ZipArchive;
if ($zip->open('test_folder.zip', ZipArchive::CREATE) === TRUE)
{
    // Add files to the zip file inside demo_folder
    $zip->addFile('text.txt', 'demo_folder/test.txt');
    $zip->addFile('test.pdf', 'demo_folder/test.pdf');
 
    // Add random.txt file to zip and rename it to newfile.txt and store in demo_folder
    $zip->addFile('random.txt', 'demo_folder/newfile.txt');
 
    // Add a file demo_folder/new.txt file to zip using the text specified
    $zip->addFromString('demo_folder/new.txt', 'text to be added to the new.txt file');
 
    // All files are added, so close the zip file.
    $zip->close();
}

Create a new zip file and move the files to be in different folders

$zip = new ZipArchive;
if ($zip->open('test_folder_change.zip', ZipArchive::CREATE) === TRUE)
{
    // Add files to the zip file
    $zip->addFile('text.txt', 'demo_folder/test.txt');
    $zip->addFile('test.pdf', 'demo_folder1/test.pdf');
 
    // All files are added, so close the zip file.
    $zip->close();
}

Create a zip file with all files from a directory

$zip = new ZipArchive;
if ($zip->open('test_dir.zip', ZipArchive::OVERWRITE) === TRUE)
{
    if ($handle = opendir('demo_folder'))
    {
        // Add all files inside the directory
        while (false !== ($entry = readdir($handle)))
        {
            if ($entry != "." && $entry != ".." && !is_dir('demo_folder/' . $entry))
            {
                $zip->addFile('demo_folder/' . $entry);
            }
        }
        closedir($handle);
    }
 
    $zip->close();
}

Add multiple files and directories to a zip file

$zip = new ZipArchive;
if ($zip->open('test_files_dirs.zip', ZipArchive::OVERWRITE) === TRUE)
{
    // Add directory1
    if ($handle = opendir('demo_folder/directory1/'))
    {
        while (false !== ($entry = readdir($handle)))
        {
            if ($entry != "." && $entry != "..")
            {
                $zip->addFile('demo_folder/directory1/' . $entry);
            }
        }
        closedir($handle);
    }
 
    // Add directory2
    if ($handle = opendir('demo_folder/directory2/'))
    {
        while (false !== ($entry = readdir($handle)))
        {
            if ($entry != "." && $entry != "..")
            {
                $zip->addFile('demo_folder/directory2/' . $entry);
            }
        }
        closedir($handle);
    }
 
    // Add directory3
    if ($handle = opendir('demo_folder/directory3/'))
    {
        while (false !== ($entry = readdir($handle)))
        {
            if ($entry != "." && $entry != "..")
            {
                $zip->addFile('demo_folder/directory3/' . $entry);
            }
        }
        closedir($handle);
    }
 
    // Add more files
    $zip->addFile('demo_folder/index.txt');
 
    $zip->close();
}

Source: https://www.virendrachandak.com/techtalk/how-to-create-a-zip-file-using-php/

$filename = 'errors.log';
$logfile = 'path/log' . $filename;
$zipfile = date('dmY') . '.zip';
$archive = 'path/archive';
if (file_exists($logfile)) {
        $zip = new ZipArchive();
        if ($zip->open($archive . $zipfile, file_exists($archive . $zipfile) ? ZipArchive::OVERWRITE : ZipArchive::CREATE)) {
            $zip->addFile($logfile, $filename);
        }
        $zip->close();
        unlink($logfile);
    }
Related