2017-08-14 101 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)。

你最好的选择将是抢初始文件的目录列表并填充,因为可以迅速完成。然后,异步获取每个文件的元数据并填充您的应用程序。这样,用户就可以开始与应用程序进行交互,而无需等待所有的元数据加载。

相关问题