Отличный способ получить большой список файлов с измененной датой и размером

Я использую 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 сделай это так. Таким образом, если у вас есть 10000 файлов в каталоге, не будет никакого способа сделать 10000 отдельных вызовов, чтобы получить метаданные для всех файлов. Может быть какой-то инструмент, который намеревается получить все это за один раз, но он просто будет абстрагироваться от того факта, что он просматривает все файлы в каталоге, чтобы получить информацию, и не собирается работать быстрее.

Единственный известный мне способ сделать это — создать нечто, что напрямую обращается к файловой системе для получения этой информации. Однако это не рекомендуется, так как это делает ваше приложение зависимым от определенных файловых систем (то есть ext4).

Лучше всего будет выбрать начальный список файлов для каталога и заполнить его, поскольку это можно сделать быстро. Затем, асинхронно, получите метаданные для каждого файла и заполните свое приложение. Таким образом, пользователь может начать взаимодействовать с вашим приложением, не дожидаясь загрузки всех метаданных.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector