Skip to content

Instantly share code, notes, and snippets.

@mrwadson
Last active October 26, 2022 21:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrwadson/3edd5cf1ee06f488b5174440fd257d65 to your computer and use it in GitHub Desktop.
Save mrwadson/3edd5cf1ee06f488b5174440fd257d65 to your computer and use it in GitHub Desktop.
Zip directory or file
<?php
ini_set('max_execution_time', 600);
ini_set('memory_limit', '1024M');
// -------------------------------
$source = __DIR__ . '/images';
$dest = __DIR__ . '/images.zip';
// -------------------------------
printf("Start zip '%s' %s to '%s'\n%s", $source, is_dir($source) ? 'directory' : 'file', $dest, zipDirOrFile($source, $dest));
function zipDirOrFile($source, $dest)
{
$zip = new ZipArchive();
if (($result = $zip->open($dest, ZIPARCHIVE::CREATE)) === true) {
$source = realpath($source);
if (is_dir($source)) {
$iterator = new RecursiveDirectoryIterator($source);
$iterator->setFlags(FilesystemIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file) {
$file = realpath($file);
if (is_dir($file)) {
$zip->addEmptyDir(str_replace($source . DIRECTORY_SEPARATOR, '', $file . DIRECTORY_SEPARATOR));
} elseif (is_file($file)) {
$zip->addFile($file, str_replace($source . DIRECTORY_SEPARATOR, '', $file));
}
}
} elseif (is_file($source)) {
$zip->addFile($source, basename($source));
}
return $zip->close() ? 'Success' : 'Failure zip operation';
}
return 'Failed with error: ' . getZipErrorMessage($result);
}
function getZipErrorMessage($result)
{
switch ($result) {
case ZipArchive::ER_EXISTS:
$ErrMsg = 'File already exists';
break;
case ZipArchive::ER_INCONS:
$ErrMsg = 'Zip archive inconsistent';
break;
case ZipArchive::ER_MEMORY:
$ErrMsg = 'Malloc failure';
break;
case ZipArchive::ER_NOENT:
$ErrMsg = 'No such file';
break;
case ZipArchive::ER_NOZIP:
$ErrMsg = 'Not a zip archive';
break;
case ZipArchive::ER_OPEN:
$ErrMsg = 'Can\'t open file';
break;
case ZipArchive::ER_READ:
$ErrMsg = 'Read error';
break;
case ZipArchive::ER_SEEK:
$ErrMsg = 'Seek error';
break;
default:
$ErrMsg = 'Unknown error';
break;
}
return $ErrMsg;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment