. */ namespace SP\Infrastructure\File; use Phar; use PharData; use SP\Domain\Core\PhpExtensionCheckerService; use SP\Domain\File\Ports\ArchiveHandlerInterface; /** * Class ArchiveHandler */ class ArchiveHandler implements ArchiveHandlerInterface { private readonly PharData $archive; public function __construct(string $archive, PhpExtensionCheckerService $phpExtensionCheckerService) { $phpExtensionCheckerService->checkPhar(true); $this->archive = new PharData(self::makeArchiveName($archive)); } private static function makeArchiveName(string $archive): string { // return preg_replace('/\.gz$/', '', $archive); return sprintf('%s.tar', $archive); } /** * Realizar un backup de la aplicación y comprimirlo. * * @throws FileException */ public function compressDirectory(string $directory, ?string $regex = null): string { $this->archive->buildFromDirectory($directory, $regex); $packed = $this->archive->compress(Phar::GZ); // Delete the non-compressed archive (new FileHandler($this->archive->getPath()))->delete(); return $packed->getFileInfo()->getPathname(); } /** * Realizar un backup de la aplicación y comprimirlo. * * @throws FileException */ public function compressFile(string $file): string { $this->archive->addFile($file, basename($file)); $packed = $this->archive->compress(Phar::GZ); // Delete the non-compressed files (new FileHandler($file))->delete(); (new FileHandler($this->archive->getPath()))->delete(); return $packed->getFileInfo()->getPath(); } }