How to ZIP a files/folder on the server with php

Post Reply
User avatar
Saman
Lieutenant Colonel
Lieutenant Colonel
Posts: 828
Joined: Fri Jul 31, 2009 10:32 pm
Location: Mount Lavinia

How to ZIP a files/folder on the server with php

Post by Saman » Fri May 14, 2010 7:13 pm

  1. Folder

    Code: Select all

    <?
    // increase script timeout value
    ini_set("max_execution_time", 300);
    // create object
    $zip = new ZipArchive();
    // open archive
    if ($zip->open("my-archive.zip", ZIPARCHIVE::CREATE) !== TRUE) {
    die ("Could not open archive");
    }
    // initialize an iterator
    // pass it the directory to be processed
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("app/"));
    // iterate over the directory
    // add each file found to the archive
    foreach ($iterator as $key=>$value) {
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
    }
    // close and save archive
    $zip->close();
    echo "Archive created successfully.";
    ?>
    

  2. Files

    Code: Select all

    /* creates a compressed zip file */
    function create_zip($files = array(),$destination = '',$overwrite = false) {
        //if the zip file already exists and overwrite is false, return false
        if(file_exists($destination) && !$overwrite) { return false; }
        //vars
        $valid_files = array();
        //if files were passed in...
        if(is_array($files)) {
            //cycle through each file
            foreach($files as $file) {
                //make sure the file exists
                if(file_exists($file)) {
                    $valid_files[] = $file;
                }
            }
        }
        //if we have good files...
        if(count($valid_files)) {
            //create the archive
            $zip = new ZipArchive();
            if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
                return false;
            }
            //add the files
            foreach($valid_files as $file) {
                $zip->addFile($file,$file);
            }
            //debug
            //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
            
            //close the zip -- done!
            $zip->close();
            
            //check to make sure the file exists
            return file_exists($destination);
        }
        else
        {
            return false;
        }
    }
     
    Usage

    Code: Select all

    $files_to_zip = array(
        'preload-images/1.jpg',
        'preload-images/2.jpg',
        'preload-images/5.jpg',
        'kwicks/ringo.gif',
        'rod.jpg',
        'reddit.gif'
    );
    //if true, good; if false, zip creation failed
    $result = create_zip($files_to_zip,'my-archive.zip');
     
Post Reply

Return to “PHP & MySQL”