PHP zip results in flat folder structure -


i using php zip function created former employee. compresses files , folders i'm having 2 problems resulting zip file:

a. doesn't include 'main' folder
b. doesn't keep parent/child folder structure

what want have child folders under parent folders, so:

parent1    +-- child1a    +-- child1b parent2 parent3    +-- child3a       +-- subchild3a1       +-- subchild3a2 

but i'm ending flat folder structure in zip file:

parent1 child1a child1b parent2 parent3 child3a subchild3a1 subchild3a2 

how resolve issue using following code:

<?php  function foldertozip($folder, &$zipfile, $subfolder = null) {     if ($zipfile == null) {         return false;     }      $folder .= end(str_split($folder)) == "/" ? "" : "/";     $subfolder .= end(str_split($subfolder)) == "/" ? "" : "/";      $handle = opendir($folder);      while ($f = readdir($handle)) {         if ($f != "." && $f != ".." && $f != "archive") {                 if (is_file($folder . $f)) {                         if ($subfolder != null)                         $zipfile->addfile($folder . $f, $subfolder . $f);                         else                         $zipfile->addfile($folder . $f);         } elseif (is_dir($folder . $f)) {                 $zipfile->addemptydir($f);                 foldertozip($folder . $f, $zipfile, $f);             }         }     } } ?>  <?php  $z = new ziparchive(); $z->open("test.zip", ziparchive::create); foldertozip("c:/path/to/look/for/files/to/compress/", $z);  echo "<br />done";  $z->close();  $ex_file = "./archive/back-" . date('ymd_hi', time()) . ".zip";  rename("test.zip", $ex_file);  ?> 



edit: here's script worked me:

<?php  function foldertozip($folder, $zipfile, $subfolder = null) {     if ($zipfile == null) {         return false;     }      $folder .= end(str_split($folder)) == "/" ? "" : "/";     $subfolder .= end(str_split($subfolder)) == "/" || $subfolder == null ? "" : "/";      $handle = opendir($folder);      while ($f = readdir($handle)) {       if ($f != "." && $f != ".." && $f != "archive") {                 if (is_file($folder . $f)) {                         $zipfile->addfile($folder . $f, $subfolder . $f);         } elseif (is_dir($folder . $f)) {                 $zipfile->addemptydir($subfolder . $f);                 foldertozip($folder . $f, $zipfile, $subfolder . $f);             }         }     } } ?>  <?php  $z = new ziparchive(); $z->open("test.zip", ziparchive::create); foldertozip("c:/path/to/look/for/files/to/compress/", $z);  echo "<br />done";  $z->close();  $ex_file = "./archive/back-" . date('ymd_hi', time()) . ".zip";  rename("test.zip", $ex_file);  ?> 

this code appears incorrect:

} elseif (is_dir($folder . $f)) {    $zipfile->addemptydir($f);    foldertozip($folder . $f, $zipfile, $f); } 

i believe should be:

} elseif (is_dir($folder . $f)) {    $zipfile->addemptydir($subfolder . $f);    foldertozip($folder . $f, $zipfile, $subfolder . $f); } 

without referencing $subfolder , passing recursive function, referencing '/' or root of zip file.


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -