如何在不知道文件扩展名的情况下按名称取消链接()


How to unlink() by its name without knowing the file extention?

简而言之

我们有一个名为clients.(unique parameter)的文件。现在我们想unlink()它,但由于我们不知道文件扩展名,我们如何成功?

更长的故事

我有一个缓存系统,其中md5()中的DB查询是文件名,缓存过期日期是扩展名。

示例:896794414217d16423c6904d13e3b16d.3600

但有时有效期会改变。因此,对于最终的解决方案,应该忽略文件扩展名。

我能想到的唯一方法是搜索目录并匹配文件名,然后获取文件扩展名。

使用glob():

$files = glob("/path/to/clients.*");
foreach ($files as $file) {
  unlink($file);
}

如果需要,可以检查glob()返回的每个文件的filemtime(),以便对它们进行排序,例如,只删除最旧的文件。

// Example: Delete those older than 2 days:
$files = glob("./clients.*");
foreach ($files as $file) {
   if (filemtime($file) < time() - (86400 * 2)) {
     unlink($file);
   }
}

您在目录中搜索匹配文件名的猜测是正确的。你可以采取多种方法:

readdir有问题的文件夹

Micheal 提出的glob

您还可以获得ls {$target_dir} | grep {$file_first_part}的输出,然后取消结果字符串的链接(假设找到匹配项)。