'*.zip', 'backup-restore-in' => '*.zip', ]; public function handle(): int { $ore = max(1, (int) $this->option('ore')); $limite = now()->subHours($ore)->getTimestamp(); $rimossi = 0; $liberati = 0; foreach (self::CARTELLE as $cartella => $pattern) { $percorso = storage_path('app/' . $cartella); if (! is_dir($percorso)) { continue; } foreach (glob($percorso . '/' . $pattern) ?: [] as $file) { if (filemtime($file) >= $limite) { continue; } $dimensione = filesize($file) ?: 0; if (@unlink($file)) { $rimossi++; $liberati += $dimensione; } } } // Le cartelle di staging del ripristino: il job le cancella nel // finally, ma un processo ucciso a meta' non arriva a eseguirlo. $staging = storage_path('app/backup-restore'); if (is_dir($staging)) { foreach (glob($staging . '/*', GLOB_ONLYDIR) ?: [] as $dir) { if (filemtime($dir) < $limite) { $this->rimuoviCartella($dir); $rimossi++; } } } $this->info(sprintf( 'Pulizia backup: %d elementi rimossi, %.1f MB liberati.', $rimossi, $liberati / 1048576 )); return self::SUCCESS; } private function rimuoviCartella(string $path): void { $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST ); foreach ($iterator as $item) { /** @var \SplFileInfo $item */ $item->isDir() ? @rmdir($item->getPathname()) : @unlink($item->getPathname()); } @rmdir($path); } }