PHP如何实现指定目录下仅删除超特定时长的指定后缀文件
解决方案
以下是修改后的完整代码,通过白名单+受保护文件双重规则避免误删:
<?php $path = './test/'; // 配置需要清理的目标文件后缀(统一小写) $allowed_extensions = ['txt', 'log', 'tmp', 'jpg']; // 配置需要强制保留的特殊文件 $protected_files = ['.htaccess', '.user.ini', 'index.html']; // 过期时间阈值,10分钟对应600秒,测试阶段可改为20秒 $expire_seconds = 600; if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { // 跳过当前目录、上级目录和受保护文件 if ($file == '.' || $file == '..' || in_array($file, $protected_files)) { continue; } $full_path = $path . $file; // 只处理普通文件,跳过子目录避免操作报错 if (!is_file($full_path)) { continue; } // 获取文件后缀并转小写,兼容大小写后缀格式 $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); // 后缀不在允许清理列表内直接跳过 if (!in_array($ext, $allowed_extensions)) { continue; } // 过期判断逻辑 $filelastmodified = filemtime($full_path); if((time() - $filelastmodified) > $expire_seconds) { unlink($full_path); } } closedir($handle); } ?>
核心调整说明
- 新增受保护文件规则:把.htaccess这类需要永久保留的文件加入
$protected_files数组,匹配到就直接跳过处理,从根源避免误删 - 新增后缀白名单规则:只有后缀在
$allowed_extensions数组内的文件才会进入过期判断,你可以根据自己的业务需求增减数组内的后缀值 - 新增目录过滤逻辑:跳过
.、..两个特殊系统目录和其他子目录,避免filemtime、unlink操作抛出异常 - 后缀统一转小写处理,兼容JPG、TXT这类大写后缀的文件识别
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

