2016-12-01 57 views
3

奇怪的是,当我试图谷歌这个问题输入查询类似于这个问题没有用的弹出,甚至没有关闭。PHP - 如何测试/检查目录/文件夹是否包含旧的文件/文件比?

现在我是而不是正在寻找一种解决方案,您可以扫描或打开目录,并通过文件读取其内容文件。对于那些寻找这样不可靠的循环,检查这些功能:scandir(...)加载所有一次,然后循环它,并opendir(...),readdir(...),stat(...)['mtime']要做文件的文件,并可能设置一些限制多少完成,并使其在至少有点安全...

我想知道的是在PHP中是否有某些东西可以通过某种简单的方式检查/测试一个文件夹/目录是否包含[sometime]之前的文件,甚至是有多少这样的文件没有任何种类的“手动”通过?

PS:我已经看到了一些shell_exec秒,但似乎并不太跨操作系统...

+0

该手册包含从“偏执狂在DDS点NL”可能满足您的要求注释:http://php.net/manual/en/function.filemtime。 php – markdwhite

+0

@markdwhite这真的很有趣,但是这与我想要的几乎相反 - 最新的文件更改,而不是最古老的 - 这将是我的笑声:-) –

+0

@ jave.web所以你正在寻找一个标准独立于平台的PHP命令,它将以一种奇特的方式扫描一个目录,而不用手动和/或循环地进行;所以如果在某个日期之前至少创建了一个文件或这些文件的“编号”,它应该返回“真”或“假”?不。没有这样的功能。您的限制“跨操作系统”导致唯一的答案是“循环访问文件”。你可以在这里检查一个例子:http://stackoverflow.com/a/2205784/4621324 – Axalix

回答

0

您可以使用filectime(path)filemtime(path)功能从文件或文件夹查看创建时间。它将返回unixtime,然后您可以与某个时间进行比较

+0

它仍然需要通过文件循环才能得到答案 - 正如我在**中所说的大胆** - 这不是我正在寻找,因为我知道如何做到这一点:-) –

1

很明显,没有内置函数可以做到这一点,因为这是太具体。你必须以某种方式自己做,就像你喜欢的那些shell函数在内部一样。

编写一个可以在需要的地方使用它的函数。自然,PHP提供了一系列功能,使整个事情变得更小,并且可能更快。例如你可以这样做:

function folder_has_older_file($folder, $time) 
{ 
    return count(array_filter(array_map('filemtime', glob("$folder/*")), function ($a) use ($time) { return $a < $time; })) > 0; 
} 
+0

我看到...注:glob基本上是条件化的scandir - 所以这不是我说的我正在寻找。然而有趣的是,这个想法是通过可能针对性能进行优化的函数来实现的(如果不是现在,将来可能会发生这种情况)。所以我不会接受它作为答案,但给它一个赞成这个想法;) –

+1

@ jave.web它总是会扫描目录在某个级别,没有办法绕过它。 – Havenard

+0

这很伤心,但如果是这样,我宁愿直接在系统级别上完成它(尽管通过PHP调用)。 –

相关问题