Эта тема на forum.dklab.ru


Александр Эсаулов: Быстрое сканирование каталога на наличие каталогов.
Как быстро получить список каталогов в каталоге?

opendir() не подходит, т.к. производится полное сканирование папки. К примеру, в папке есть 5 папок и 10000 файлов. Не разумно производить полный цикл и проверять c помощью is_dir() каждый файл. Ведь нужно получить массив с 5-ю папками.

glob() c флагом GLOB_ONLYDIR хоть и возвращает то что нужно, но по скорости уступает opendir(). Т.к. подозреваю тоже производится полное сканирование папки.

За два дня так и не нашел решения, неужели его нет??? Подскажите пожалуйста.
Maus:
Александр Эсаулов
мм, а вызов системной утилиты сильно быстрее?
Александр Эсаулов:
Вот этого не знаю. Вы, наверное, хотите сказать, что здесь все упирается в сам механизм ОС? PHP тут не причем? То есть и системными утилитами не избавиться от полного сканирования папки?
dimagolov:
То есть и системными утилитами не избавиться от полного сканирования папки?
это зависит от ФС в первую очередь, умеет ли она отбирать записи по атрибутам или только перебирать их последовательно.
Юрий Насретдинов:
За два дня так и не нашел решения, неужели его нет??? Подскажите пожалуйста.
Вообще, под windows функции для работы с папками (не PHP, а C) сразу возвращают, папка это или файл. Но, конечно, папку придётся просмотреть целиком. А под *nix и этой возможности нет -- нужно вызывать stat() для каждого файла в директории. В принципе, это тоже работает вполне сносно.
Александр Эсаулов:
Хорошо. Мне все понятно, спасибо за разъяснение!

Вопрос решен, тему можно закрыть.
Maus:
Вот этого не знаю
А проверить? У Вас 10k файлов, не у меня.
здесь все упирается в сам механизм ОС?
может упираться

Тема закрыта.

Эта тема на forum.dklab.ru