Laravel 11 Xoá các file ảnh ,file tài liệu cũ
Tạo service FileService để xử lý các dữ liệu liên quan đến file \app\Services\FileService.php
<?php
namespace App\Services;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class FileService
{
public $timestamp;
/**
* Recursively get all files in a directory.
*
* @param string $directory
* @return array
*/
public function getAllFiles($directory, $disk = 'public')
{
$files = [];
$directoryContents = Storage::disk($disk)->allFiles($directory);
foreach ($directoryContents as $file) {
$files[] = $file;
}
$subdirectories = Storage::disk($disk)->allDirectories($directory);
// Remove duplicate file paths if any
$files = array_unique($files);
return $files;
}
public function delete_file(string $file, $disk = 'public')
{
try {
Storage::disk($disk)->delete($file);
Log::info("Deleted: $file");
return 1;
} catch (\Exception $e) {
return 0;
}
}
public function __construct()
{
$this->timestamp = Carbon::now()->format('Y_m_d_H_i_s');
}
/**
* Tạo tên file export
* @param string $fileName
* @param string $type
* @return string
*/
public function setname_file(string $fileName, string $type = 'xlsx'): string
{
return $fileName . '_' . $this->timestamp . '.' . $type;
}
}
Tạo command để xoá file DeleteFileOldCommand.php
<?php
namespace App\Console\Commands\Export;
use App\Services\FileService;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Storage;
use Throwable;
class DeleteFileOldCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
// protected $signature = 'app:delete-file-old-command {--days_ago=30}';
protected $signature = 'app:delete-file-old-command {days_ago}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command xóa các file cũ ';
/**
* Execute the console command.
*/
public function handle()
{
// dùng nếu php artisan app:delete-file-old-command --days_ago=10
// $days_ago =(int) $this->option('days_ago');
//dùng nếu php artisan app:delete-file-old-command 10
$days_ago = (int)$this->argument('days_ago');
$fileserivce = new FileService();
$files = $fileserivce->getAllFiles('');
// Define the time limit (e.g., 24 hours)
$timeLimit = Carbon::now()->subSeconds($days_ago);
foreach ($files as $file) {
$lastModified = Carbon::createFromTimestamp(Storage::disk('public')->lastModified($file));
if ($lastModified->lessThan($timeLimit)) {
$fileserivce->delete_file($file);
}
}
$this->info('Old files deleted successfully.');
}
public function fail(Throwable|string|null $exception = null)
{
$this->info('Failed to delete');
}
}
Xong ta tạo crontab để chạy auto \routes\console.php
<?php
.....
use Illuminate\Support\Facades\Schedule;
......
Schedule::command('app:delete-file-old-command 10')->at('3:00')->runInBackground()->onOneServer()->timezone('Asia/Ho_Chi_Minh');
......
Vậy là xong