#laravel #cron #laravel-7
Вопрос:
Я работаю над проектом, из которого требуется удалить все файлы storage/public/dir_name/
. Пример имени файла таков jIK4uh.png
. Для этой задачи я должен использовать задание cron. Вот метод, которому я следую.
приложение/консоль/команды/ClearPublicStorage.png
class ClearPublicStorageCron extends Command {
protected $signature = 'storage:clear';
public function handle()
{
Log::info("Public storage files cleared!");
// tasks logic here
$this->info('Cron command run successfully');
}
}
app/Console/Kernel.php
class Kernel extends ConsoleKernel {
protected function schedule(Schedule $schedule)
{
$schedule->command('storage:clear')->hourly();
}
}
Затем бегом php artisan schedule:run
Теперь, как выбрать все файлы, которые старше, чем за последний час, и удалять их каждый час, следуя этой стратегии? Или какая-нибудь другая эффективная идея для этого ?
Версия для Laravel : 7.30
Комментарии:
1. Вы храните имя файла в базе данных?
2. да. Информация о файле хранится в базе данных.
Ответ №1:
Основная идея заключается в использовании storage lastModified
даты и времени
получить последние изменения datetime
из файла
$fileTime=Storage::disk('public')->lastModified('dummy.pdf');
$fileModifiedDateTime=Carbon::parse($fileTime);
if(Carbon::now()->gt($fileModifiedDateTime->addHour())){
//delete file here
}
Если вы сохраняете имя файла в базе данных, вы можете удалить его в зависимости от даты загрузки файла
Обновленный
$files = Storage::disk("public")->allFiles("claim-images");
foreach ($files as $file) {
$time = Storage::disk('public')->lastModified($file);
$fileModifiedDateTime = Carbon::parse($time);
if (Carbon::now()->gt($fileModifiedDateTime->addHour(1))) {
Storage::disk("public")->delete($file);
}
//storage symbolic link files not required to delete.Still providing here for you reference
if (File::exists(public_path('storage/' . $file))) {
File::delete(public_path('storage/' . $file));
}
}
Комментарии:
1.
lastModified
File not found at path
ошибка броска.2. где находится ваш файл .можете ли вы прокомментировать точный путь к файлу
3. точный путь к файлу таков
storage/claim-images/filename.png
. Я пытаюсь получить последнее изменение с помощьюStorage::disk("public")->files("claim-images/filiname.png")
4. затем удалите диск(«общедоступный»)-> из хранилища
5. $fileTime=Хранилище::Последнее изменение(‘claim-изображения/filiname.png’);