如何在Laravel中删除public目录下自定义temp文件夹内的文件?
Laravel每日清理public/temp目录实现方案
1 创建自定义Artisan清理命令
首先执行生成命令的指令:php artisan make:command ClearTempFolder
生成的命令文件位于app/Console/Commands/ClearTempFolder.php,修改文件内容如下:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\File; class ClearTempFolder extends Command { // 命令调用名 protected $signature = 'temp:clear'; // 命令描述 protected $description = '清空public/temp目录下的所有文件和子目录'; public function handle() { $tempPath = public_path('temp'); // 校验目录是否存在 if (!File::exists($tempPath)) { $this->error('public/temp目录不存在,清理终止'); return Command::FAILURE; } // 清理目录下所有内容,保留temp目录本身 File::cleanDirectory($tempPath); $this->info('public/temp目录清理完成'); return Command::SUCCESS; } }
2 配置调度规则
打开app/Console/Kernel.php文件,在schedule方法中添加定时调度配置:
protected function schedule(Schedule $schedule) { // 原有其他调度规则保留 // 每日执行一次清理,可自定义时间,比如凌晨2点执行改为 ->dailyAt('02:00') $schedule->command('temp:clear')->daily(); }
3 配置服务器定时任务
Laravel的调度系统需要依托服务器的Crontab运行,执行以下命令编辑Crontab规则:crontab -e
在打开的编辑窗口中添加如下内容,注意将项目路径替换为你自己的项目根目录绝对路径:* * * * * cd /你的项目根目录绝对路径 && php artisan schedule:run >> /dev/null 2>&1
保存退出后,Crontab会自动生效。
4 功能验证
可以先手动执行命令测试功能是否正常:php artisan temp:clear
执行后检查public/temp目录下的文件是否被全部清空即可。
可选拓展:仅清理指定天数前的文件
如果你不需要每次清空所有文件,只需要清理N天前的旧文件,可以将命令handle方法中的File::cleanDirectory($tempPath)替换为如下逻辑:
// 示例:仅清理7天前的文件 $days = 7; foreach (File::allFiles($tempPath) as $file) { $lastModified = File::lastModified($file); if (now()->timestamp - $lastModified > $days * 86400) { File::delete($file); } } // 如果需要同时清理过期子目录,可额外添加遍历目录的逻辑
内容的提问来源于stack exchange,提问作者user17148046
相关产品推荐
相关产品推荐

