2016-12-01 64 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調用)。 –

相關問題