. */ namespace SP\Storage\File; use Phar; use PharData; use SP\Core\Exceptions\CheckException; use SP\Core\PhpExtensionChecker; /** * Class ArchiveHandler * * @package SP\Storage\File */ final class ArchiveHandler { public const COMPRESS_EXTENSION = '.tar.gz'; private PhpExtensionChecker $extensionChecker; private FileHandler $archive; public function __construct( string $archive, PhpExtensionChecker $extensionChecker ) { $this->extensionChecker = $extensionChecker; $this->archive = new FileHandler(self::makeArchiveName($archive)); } private static function makeArchiveName(string $archive): string { $archiveExtension = substr( self::COMPRESS_EXTENSION, 0, strrpos(self::COMPRESS_EXTENSION, '.') ); if (is_file($archive)) { return substr( $archive, 0, strrpos($archive, '.') ) . $archiveExtension; } return $archive . $archiveExtension; } /** * Realizar un backup de la aplicación y comprimirlo. * * @throws CheckException * @throws FileException */ public function compressDirectory( string $directory, ?string $regex = null ): void { $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. * * @throws CheckException * @throws FileException */ public function compressFile(string $file): void { $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(); } }