Я пытаюсь отсканировать каталог и получить только последний файл, добавленный в каталог, используя сортировку имени файла
мои файлы имеют разные имена файлов, но всем предшествует w/unix_timestamp, например: 1423285600_smas293.jpg 1423285700_smas11.doc
Поэтому я знаю метод для этого $ files = scandir ($ dir, SCANDIR_SORT_DESCENDING); $ newest_file = $ files [0];
но, похоже, сначала загружает все файлы в массив... и если у меня есть 100K (теоретически) файлы? что тогда? Будет ли сервер вялым?
Поэтому я надеялся отсканировать и получить только ограниченное количество файлов в массив, если это возможно, или любые другие стратегии, которые в основном получают то, что мне нужно.
С уважением
Ну, вы можете использовать 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");
?>
В конечном итоге это было бы, конечно, лучшим решением для хранения ваших файлов в папках по дням или неделям. Ваша файловая система в конечном итоге задохнется, когда вы создадите столько файлов только в одном каталоге.
glob()
. Это дает вам возможность определить строку файла, который вы ищете. php.net/manual/en/function.glob.php