PHP按指定扩展名过滤、按修改时间删除文件代码未生效问题求助
代码修复方案
核心错误点
filemtime()仅支持传入单个文件的路径字符串,你代码中直接将glob()返回的文件路径数组作为参数传入,会直接返回布尔值false,时间比较逻辑完全无法正常执行。
修复后代码
// 匹配指定目录下的.mobileconfig文件 $files = glob('./generated/*.mobileconfig'); // 预定义1天的秒数、当前时间,避免循环内重复计算 $expire_threshold = 24 * 3600; $current_time = time(); foreach($files as $file){ // 跳过非普通文件 if(!is_file($file)){ continue; } // 单独获取当前遍历文件的最后修改时间 $file_mtime = filemtime($file); // 时间校验通过后执行删除 if($file_mtime && ($current_time - $file_mtime) > $expire_threshold) { unlink($file); } }
优化说明
- 将
filemtime()调用移到循环内部,每次针对当前遍历的单个文件读取修改时间 - 提前计算公共时间参数,减少循环内重复运算,提升执行效率
- 增加
filemtime()返回值校验,避免文件无权限、被占用等异常场景引发报错
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

