You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:06:04