addArgument('arg1', InputArgument::OPTIONAL, 'Argument description') ->addOption('option1', null, InputOption::VALUE_NONE, 'Option description') ; */ } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $verbose = $input->getOption('verbose'); $staleCount = $this->deleteStaleAvatars(); if ($verbose) { if ($staleCount > 0) { $io->writeln("There were " . $staleCount . " stale avatars."); } else { $io->writeln("There were no stale avatars younger than 24 hours."); } } return Command::SUCCESS; } private function deleteStaleAvatars(): int { $avatarDir = dirname(__DIR__, 2) . '/public/uploads/avatars'; $keepTime = 86400; // 24 hours $deletedFiles = 0; foreach (glob($avatarDir . '/*') as $entry) { $filectime = filectime($entry); if ($filectime && $filectime + $keepTime < time()) { // check if it in use if ($user = $this->userRepository->findOneBy(['avatar' => basename($entry)])) { echo basename($entry) . " is in use by: " . $user->getUserIdentifier() . PHP_EOL; } unlink($entry); $deletedFiles++; } } return $deletedFiles; } }