获取具有修改日期和大小的大量文件列表的高效方法

Performant way to get large list of files with modified date and size

我在 Linux 上使用 PHP 5.6。我正在获取目录中的文件和目录列表

$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);
}

当文件数量非常大时,这会很慢。有没有更高效的方法来存档它?

不太可能。在访问文件系统时,每个文件的元数据都是按文件抓取的,而不是批量抓取的。即使是像 ls 这样相对低级的工具也是这样做的。因此,如果您在一个目录中有 10,000 个文件,则无法通过 10,000 次单独调用来获取所有文件的元数据。可能有一些工具声称可以一次性获取所有信息,但它只是抽象了一个事实,即它循环遍历目录中的所有文件以获取信息,并且不会更快。

我知道的唯一方法是创建一些东西来直接访问文件系统以获得这些信息。但是,不建议这样做,因为它会使您的应用程序依赖于特定的文件系统(即 ext4)。

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