Question

I'm writing a PHP script that archives a selected directory and all its sub-folders. The code works fine, however, I'm running into a small problem with the structure of my archived file.

Imagine the script is located in var/app/current/example/two/ and that it wants to backup everything plus its sub directories starting at var/app/current

When I run the script it creates an archive with the following structure:

/var/app/current/index.html
/var/app/current/assets/test.css
/var/app/current/example/file.php
/var/app/current/example/two/script.php

Now I was wondering how:

a) How can I remove the /var/app/current/ folders so that the root directory of the archive starts beyond the folder current, creating the following structure:

index.html
assets/test.css
example/file.php
example/two/script.php

b) Why & how can I get rid of the "/" before the folder var?

//Create ZIP file
$zip = new ZipArchive();  
$tmpzip = realpath(dirname(__FILE__))."/".substr(md5(TIME_NOW), 0, 10).random_str(54).".zip";

//If ZIP failed
if($zip->open($tmpzip,ZIPARCHIVE::CREATE)!== TRUE)
{
    $status = "0";
}
else
{
    //Fetch all files from directory    
    $basepath = getcwd(); //   var/app/current/example/two
    $basepath = str_replace("/example/two", "", $basepath); //   var/app/current
    $dir = new RecursiveDirectoryIterator($basepath);

    //Loop through each file
    foreach(new RecursiveIteratorIterator($dir) as $files => $file)
    {
        if(($file->getBasename() !== ".") && ($file->getBasename() !== ".."))
        {
            $zip->addFile(realpath($file), $file);  
        }
    }

    $zip->close();
Was it helpful?

Solution

You should try with:

$zip->addFile(realpath($file), str_replace("/var/app/current/","",$file)); 

OTHER TIPS

I've never used the ZipArchive class before but with most archiver application it works if you change the directory and use relative path. So you can try to use chdir to the folder you want to zip up.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top