Skip to content

Commit b9371f2

Browse files
authored
Update zip-folder.php
1 parent 8c9b382 commit b9371f2

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

zip-folder.php

+29-22
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,32 @@
44
// =========================================================================
55

66
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

Comments
 (0)