. */ namespace SP\Storage\File; use SP\Core\Exceptions\CheckException; use SP\Core\PhpExtensionChecker; /** * Class ArchiveHandler * * @package SP\Storage\File */ final class ArchiveHandler { const COMPRESS_EXTENSION = '.tar.gz'; /** * @var PhpExtensionChecker */ private $extensionChecker; /** * @var FileHandler */ private $archive; /** * ArchiveHandler constructor. * * @param string $archive * @param PhpExtensionChecker $extensionChecker */ public function __construct(string $archive, PhpExtensionChecker $extensionChecker) { $this->extensionChecker = $extensionChecker; $this->archive = new FileHandler($archive . self::getArchiveExtension()); } /** * @return bool|string */ private static function getArchiveExtension() { return substr(self::COMPRESS_EXTENSION, 0, strrpos(self::COMPRESS_EXTENSION, '.')); } /** * Realizar un backup de la aplicación y comprimirlo. * * @param string $directory * @param string|null $regex * * @throws CheckException * @throws FileException */ public function compressDirectory(string $directory, string $regex = null) { $this->extensionChecker->checkPharAvailable(true); $archive = new \PharData($this->archive->getFile()); $archive->buildFromDirectory($directory, $regex); $archive->compress(\Phar::GZ); // Delete the non-compressed archive $this->archive->delete(); } /** * Realizar un backup de la aplicación y comprimirlo. * * @param string $file * * @throws CheckException * @throws FileException */ public function compressFile(string $file) { $this->extensionChecker->checkPharAvailable(true); $archive = new \PharData($this->archive->getFile()); $archive->addFile($file, basename($file)); $archive->compress(\Phar::GZ); // Delete the non-compressed archive $this->archive->delete(); } /** * @return FileHandler */ public function getArchive(): FileHandler { return $this->archive; } }