PHP: получить только один файл из каталога 10000 файлов на основе имени файла, содержащего штамп Unix

0

Я пытаюсь отсканировать каталог и получить только последний файл, добавленный в каталог, используя сортировку имени файла

мои файлы имеют разные имена файлов, но всем предшествует w/unix_timestamp, например: 1423285600_smas293.jpg 1423285700_smas11.doc

Поэтому я знаю метод для этого $ files = scandir ($ dir, SCANDIR_SORT_DESCENDING); $ newest_file = $ files [0];

но, похоже, сначала загружает все файлы в массив... и если у меня есть 100K (теоретически) файлы? что тогда? Будет ли сервер вялым?

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

С уважением

  • 1
    Посмотрите на glob() . Это дает вам возможность определить строку файла, который вы ищете. php.net/manual/en/function.glob.php
Теги:

1 ответ

1
Лучший ответ

Ну, вы можете использовать opendir() и readdir() записи в каталоге один за другим и просто запомните алфавитно большое имя файла. Это то, что scandir() и glob() конечном итоге делают под водой. Таким образом, вам не нужно загружать все в память; хотя вам все равно придется перебирать все ваши теоретически 100K файлы:

<?php    
$biggest = false;    
if ($fp = opendir('/tmp')) {
    while ( ($entry = readdir($fp)) )
    if (! $biggest or ($entry > $biggest) )
        $biggest = $entry;
    closedir($fp);
}
print("Biggest: " . $biggest . "\n");    
?>

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

  • 0
    Я боялся, что не было легкого решения этого. но спасибо за подтверждение. Кстати, каков порядок сортировки по умолчанию для readdir ()? Я имею в виду, когда он просматривает каталог, как он решает w / c файл для начала? или это случайно? Я предполагаю, что это должно быть в алфавитном порядке или по дате и времени файла ...
  • 0
    К сожалению, в списке файлов нет сортировки по умолчанию. Все происходит после слов. Порядок выделения имен файлов полностью зависит от реализации файловой системы; обычно это будет казаться случайным для вашей программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню