|
4 | 4 | // =========================================================================
|
5 | 5 |
|
6 | 6 | function zip_folder ($input_folder, $output_zip_file) {
|
7 |
| - $zipClass = new ZipArchive(); |
8 |
| - if($input_folder !== false && $output_zip_file !== false) |
9 |
| - { |
10 |
| - $res = $zipClass->open($output_zip_file, \ZipArchive::CREATE); |
11 |
| - if($res === TRUE) { |
12 |
| - // Add a Dir with Files and Subdirs to the archive |
13 |
| - $foldername = basename($input_folder); |
14 |
| - $zipClass->addEmptyDir($foldername); |
15 |
| - $foldername .= '/'; $input_folder .= '/'; |
16 |
| - // Read all Files in Dir |
17 |
| - $dir = opendir ($input_folder); |
18 |
| - while ($file = readdir($dir)) { |
19 |
| - if ($file == '.' || $file == '..') continue; |
20 |
| - // Rekursiv, If dir: GoodZipArchive::addDir(), else ::File(); |
21 |
| - $do = (filetype( $input_folder . $file) == 'dir') ? 'addDir' : 'addFile'; |
22 |
| - $zipClass->$do($input_folder . $file, $foldername . $file); |
23 |
| - } |
24 |
| - $zipClass->close(); |
25 |
| - } |
26 |
| - else { exit ('Could not create a zip archive, migth be write permissions or other reason. Contact admin.'); } |
27 |
| - } |
28 |
| -} |
| 7 | + $zipClass = new ZipArchive(); |
| 8 | + $input_folder = realpath($input_folder); |
| 9 | + $addDirDo = static function($input_folder, $name) use ($zipClass, &$addDirDo ) { |
| 10 | + $name .= '/'; |
| 11 | + $input_folder .= '/'; |
| 12 | + // Read all Files in Dir |
| 13 | + $dir = opendir ($input_folder); |
| 14 | + while ($item = readdir($dir)) { |
| 15 | + if ($item == '.' || $item == '..') continue; |
| 16 | + $itemPath = $input_folder . $item; |
| 17 | + if (filetype($itemPath) == 'dir') { |
| 18 | + $zipClass->addEmptyDir($name . $item); |
| 19 | + $addDirDo($input_folder . $item, $name . $item); |
| 20 | + } else { |
| 21 | + $zipClass->addFile($itemPath, $name . $item); |
| 22 | + } |
| 23 | + } |
| 24 | + }; |
| 25 | + if($input_folder !== false && $output_zip_file !== false) |
| 26 | + { |
| 27 | + $res = $zipClass->open($output_zip_file, \ZipArchive::CREATE); |
| 28 | + if($res === true) { |
| 29 | + $zipClass->addEmptyDir(basename($input_folder)); |
| 30 | + $addDirDo($input_folder, basename($input_folder)); |
| 31 | + $zipClass->close(); |
| 32 | + } |
| 33 | + else { exit ('Could not create a zip archive, migth be write permissions or other reason.'); } |
| 34 | + } |
| 35 | +} |
0 commit comments