Last active
October 26, 2022 21:05
-
-
Save mrwadson/3edd5cf1ee06f488b5174440fd257d65 to your computer and use it in GitHub Desktop.
Zip directory or file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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