2012-02-06 43 views
3

总之如何在不知道文件扩展的情况下通过名称取消链接()?

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

更长的故事

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

实施例:896794414217d16423c6904d13e3b16d.3600

但有时日期改变的期满。所以对于最终的解决方案,文件扩展名应该被忽略。

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

回答

8

使用glob():

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

如果需要,你可以检查由​​3210返回的每个文件的filemtime()对它们进行排序,所以你只删除最早的,例如。

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

Ty,效果很好。我想没有更好的方法,然后foreach循环。虽然它比readdir()循环更好。幸运的是,我不需要经常手动删除缓存,所以优化这不是prio。 – 2012-02-06 17:30:35

1

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

readdir

glob由迈克尔

建议

你也可以得到ls {$target_dir} | grep {$file_first_part}输出,然后断开链接生成的字符串(假设匹配有问题的文件夹中找到)。

相关问题