#!/usr/bin/env php addEmptyDir("$name/"); $zip->setExternalAttributesName("$name/", ZipArchive::OPSYS_UNIX, $p << 16); foreach(glob("$name/*") as $n) { if (substr($n, -1) != '.') { addTree($zip, $n, $verbose); } } } else if (is_file($name)) { $p = fileperms($name); if ($verbose) { printf("+ %s (%o)\n", $name, $p); } $zip->addFile($name); $zip->setExternalAttributesName($name, ZipArchive::OPSYS_UNIX, $p << 16); } else { die("** $name is not a file\n"); } } $verbose = false; $force = false; $help = false; $archive = false; $content = []; for ($i=1 ; $i<$_SERVER['argc'] ; $i++) { switch ($_SERVER['argv'][$i]) { case '-v': case '--verbose': $verbose = true; break; case '-h': case '--help': $help = true; break; case '-f': case '--force': $force = true; break; default: if ($_SERVER['argv'][$i][0] == '-') { die("** unkown option {$_SERVER['argv'][$i]}\n"); } else if ($archive) { $content[] = $_SERVER['argv'][$i]; } else { $archive = $_SERVER['argv'][$i]; } } } if ($help || !$archive || !count($content)) { die("\nUsage {$_SERVER['argv'][0]} [ --help ] [ --force ] [ --verbose ] zipfile file [ file ]\n\n"); } if ($force && is_file($archive)) { if ($verbose) { echo "delete $archive\n"; } unlink($archive); } $zip = new ZipArchive(); $err = $zip->open($archive, ZipArchive::CREATE); if ($err !== TRUE) { die("** Can't create $archive ($err)\n"); } echo "Archive: $archive\n"; foreach ($content as $n) { addTree($zip, $n, $verbose); } $zip->close();