2017-08-14 103 views
0

我使用PHP 5.6的Linux文件的大名單。我得到一個目錄高性能的方式來獲得與修改的日期和大小

$directory_listing = scandir($path); 

文件和目錄的列表,我知道我可以做一些類似以下來獲得文件名的數組加修改的日期和大小的東西。

$listings_final = array(); 
foreach ($directory_listing as $listing) { 
    $listings_final[]['listing_name'] = $listing; 
    $listings_final[]['listing_modified'] = filemtime($listing); 
    $listings_final[]['listing_size'] = filesize($listing); 
} 

當文件數量非常大時,這會很慢。有沒有更高效的方法來歸檔?

+0

或許不會,因爲即使'ls'抓住所有的數據迭代每個條目(文件/目錄),而不是散裝。但是,根據您獲得該信息的原因以及您的應用程序需要如何使用這些信息,可能有不同的方式來實現,而不會減慢UI。 –

+0

@NickCoons我正在構建一個定製的目錄列表和文件查看系統。 – Goose

+0

您可能想要做的是獲取原始目錄列表並將其發送到UI供用戶查看,然後在後臺異步填充元數據(如時間戳和大小)。 –

回答

1

不太可能。在訪問文件系統時,每個文件的元數據都是按文件抓取的,而不是批量抓取的。即使像ls這樣的相對較低級別的工具也是這樣做的。所以如果你在一個目錄中有10,000個文件,那麼就不會有任何辦法讓10,000個獨立的調用來獲取所有文件的元數據。可能有一些工具意圖一舉獲得它,但它只是抽象的一個事實,即它遍歷目錄中的所有文件以獲取信息,並且不會更快。

我知道的唯一的方式做這將是創造的東西,直接訪問文件系統的信息。但是,這不會被推薦,因爲它使您的應用程序依賴於特定的文件系統(即ext4)。

你最好的選擇將是搶初始文件的目錄列表並填充,因爲可以迅速完成。然後,異步獲取每個文件的元數據並填充您的應用程序。這樣,用戶就可以開始與應用程序進行交互,而無需等待所有的元數據加載。

相關問題