在php中给定日期之后,或者使用系统调用获取新文件列表的最有效方法是什么?
我可以完全控制文件在收到文件时的存储方式,所以我想也许将它们存储在像年/月/日/文件名这样的文件夹结构中是最好的,那么我所要做的就是扫描目录大于或等于我想要使用scandir检索的日期并将目录名转换为int值。但我不确定我是否遗漏了一些能让这更容易/更快的东西。我对最有效的方法感兴趣,因为随着时间的推移会有很多文件在构建,我不想重新扫描旧目录。基本上,目录结构应该很适合有效的手动过滤,但我想检查一下我是否遗漏了什么。
简单示例用法:
'2012/12/1' contains files test1.txt, test2.txt
'2012/12/2' => test3.txt, test4.txt
'2011/11/1' => test5.txt
'2011/11/2' => test6.txt
如果我在2011/11/2之后或之后搜索文件,那么我想要返回除test5.txt之外的所有内容。
提前感谢任何见解!
编辑:文件的存储和实际处理是两个独立的过程,所以我不能只是处理它们,这显然是最好的解决方案。
答案 0 :(得分:1)
一般来说,我创建了像YYYY/MM/DD
这样的目录来存储我的文件,通常是针对不同来源的另一个级别。有时我会使用YYYY-MM/DD
或类似的东西。请注意,十年内只有3652天,因此您甚至可以拥有像YYYY-MM-DD
这样的单一级别,而不会获得如此大的目录以至于难以使用。如果你有一个索引目录的文件系统,你可以轻松地在一个目录中拥有数万个文件,否则一千个应该是你的上限。
要处理文件,我不打扰任何实际搜索目录名称。因为我知道我感兴趣的日期,所以我可以简单地生成路径并仅扫描包含正确日期范围内文件的目录。
例如,假设我想要处理过去一周的所有文件:
for $date = today() - 7 to today():
$path = strftime("%Y/%m/%d", $date)
for $filename in getFiles($path):
processFile($path, $filename)
答案 1 :(得分:0)
根据您编写路径的方式,看起来您在linux或Mac上。
find命令可以返回在特定日期内修改(或访问)的文件列表。
// find files that were modified less than 30m ago
$filelist = system("find /path/to/files -type f -mmin -30");
我认为应该谨慎使用系统调用,因为它们会降低可移植性。
如上所述存储在目录中是有意义的,因为它会减少搜索空间。