user1138383
user1138383

Reputation: 115

Make Zip File of files from different location in php

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;

}

}

// using function as

include('functions.php');

$files_to_zip = array(

'database/350-001(3.1).examdb',

'setup/ExaminationEngine.exe'

);

//if true, good; if false, zip creation failed

$result = create_zip($files_to_zip,'my-archive.zip');

I am using this function to make zip.

Every thing is working perfect but the files that are created under zip file is created by full path i want only my two file in my-archive.php. but inside my-archive.php datbase/350-001(3.1).examdb and setup/ExaminationEngine.exe database and setup folder is created.

How can i fix this?

Upvotes: 2

Views: 776

Answers (2)

Mariusz Sakowski
Mariusz Sakowski

Reputation: 3282

try

//add the files
foreach($valid_files as $file) {
    $zip->addFile($file,basename($file));
}

instead of

//add the files
foreach($valid_files as $file) {
    $zip->addFile($file,$file); 
}

second argument of addFile is 'local path', basename of $file is what you want to pass to it (I assume that right now you are passing some kind of relative path)

Remember that you will have to manually assert that your filenames are unique.

see

http://php.net/manual/en/ziparchive.addfile.php

http://php.net/manual/en/function.basename.php

Upvotes: 2

jpic
jpic

Reputation: 33410

I recommend that you prepare a temporary folder, copy the files from different locations in there, zip it, and remove the temporary folder. Doing otherwise sounds pretty boring.

Upvotes: 0

Related Questions