src/MakeZip.php
public static function zipFiles($filesPath, $outZipPath, string $prefix = '.', $files = null, $deleteOriginals = true, $removeAllPath = true)
    {
        # Força o carregamente de todos os arquivos caso seja empty()
        if (empty($files)) $files = ['[a-z]+'];
        elseif (! is_array($files) && ! empty($files)) return self::zipStatusString(ZipArchive::ER_NOENT);

        $pattern = '';
        $z = new ZipArchive();

        $ret = $z->open($outZipPath, ZipArchive::OVERWRITE);
        if ($ret === ZipArchive::ER_NOENT) {
            $ret = $z->open($outZipPath, ZipArchive::CREATE);
            if ($ret !== true) return self::zipStatusString($ret);
        } elseif ($ret !== true) return self::zipStatusString($ret);

        $options = ['add_path' => $prefix, 'remove_all_path' => boolval($removeAllPath)];

        if (isset($files['files']))
            $pattern = implode("|", $files['files']);

        if (isset($files['extensions'])) {
            $sfiles = implode("|", $files['extensions']);
            if (empty($pattern)) $pattern = '\.(?:' . $sfiles . ')';
            else $pattern .= '|\.(?:' . $sfiles . ')';
        } elseif (! isset($files['files']) && ! isset($files['extensions'])) {
            $sfiles = implode("|", $files);
            $pattern = '\.(?:' . $sfiles . ')';
        }

        $ret = $z->addPattern('/' . $pattern . '$/', $filesPath, $options);
        if (! $ret) {
            return self::zipStatusString(ZipArchive::ER_WRITE);
        }

        $ret = $z->close();
        if ($ret !== true) return self::zipStatusString($ret);

        return self::deleteFiles($filesPath, $files, $deleteOriginals);
    }
public static function zipFiles($filesPath, $outZipPath, string $prefix = '.', $files = null, $deleteOriginals = true, $removeAllPath = true)
    {
        # Força o carregamente de todos os arquivos caso seja empty()
        if (empty($files)) $files = ['[a-z]+'];
        elseif (! is_array($files) && ! empty($files)) return self::zipStatusString(ZipArchive::ER_NOENT);

        $pattern = '';
        $z = new ZipArchive();

        $ret = $z->open($outZipPath, ZipArchive::OVERWRITE);
        if ($ret === ZipArchive::ER_NOENT) {
            $ret = $z->open($outZipPath, ZipArchive::CREATE);
            if ($ret !== true) return self::zipStatusString($ret);
        } elseif ($ret !== true) return self::zipStatusString($ret);

        $options = ['add_path' => $prefix, 'remove_all_path' => boolval($removeAllPath)];

        if (isset($files['files']))
            $pattern = implode("|", $files['files']);

        if (isset($files['extensions'])) {
            $sfiles = implode("|", $files['extensions']);
            if (empty($pattern)) $pattern = '\.(?:' . $sfiles . ')';
            else $pattern .= '|\.(?:' . $sfiles . ')';
        } elseif (! isset($files['files']) && ! isset($files['extensions'])) {
            $sfiles = implode("|", $files);
            $pattern = '\.(?:' . $sfiles . ')';
        }

        $ret = $z->addPattern('/' . $pattern . '$/', $filesPath, $options);
        if (! $ret) {
            return self::zipStatusString(ZipArchive::ER_WRITE);
        }

        $ret = $z->close();
        if ($ret !== true) return self::zipStatusString($ret);

        return self::deleteFiles($filesPath, $files, $deleteOriginals);
    }
Compacta arquivos no formato .zip
Exemplo:
$filePath = 'download/temp/';
$outZipPath = 'download/nameFile.zip';
$prefix = 'img_';

# O parametro $files pode receber um array com sub arrays conforme segue o exemplo abaixo, ou pode receber um array contendo diretamente as extensões, ex.: ['png', 'jpg', ...]
$files = ['files' => ['file1.jpg', 'file2.jpg], 'extensions' => ['png', 'gif']];

# $deleteOriginals por default é TRUE
$deleteOriginals = false;

# $removeAllPath por default é TRUE
$removeAllPath = false;

HZip::zipFiles($filesPath, $outZipPath, $prefix, $files, $deleteOriginals, $removeAllPath);

@param string $filesPath Caminho dos arquivos que serão compactados.
@param string $outZipPath Caminho onde será armazenado o arquivo Zip.
@param string $prefix String que precede o nome do arquivo.
@param mixed $files Array para especificar extensões ou arquivos, ou um valor empty todos.
@param bool $deleteOriginals Chave para informar se serão deletados os arquivos originais.
@param bool $removeAllPath Chave para informar se será deletado o caminho até os arquivos originais.
@return mixed Retorna TRUE caso tenha sucesso ou uma string de erro.