Я создал эту функцию:
function expandDirectories2($base_dir) {
$directories = array();
$folders = glob($base_dir."*", GLOB_ONLYDIR);
foreach($folders as $file) {
if($file == '.' || $file == '..') continue;
$dir = $file;
if(is_dir($dir)) {
$directories []= $dir;
$directories = array_merge($directories, expandDirectories2($dir));
}
}
return $directories;
}
print_r(expandDirectories2("./"));
Эта функция читает все каталоги и подкаталоги указанной папки. Проблема в том, что загрузка страницы занимает так много времени, и иногда она показывает memory_exhausted
ошибка.
Я только хочу сделать массив с каталогами и подкаталогами папки. Я не хочу быть иерархическим, и порядок не важен.
Пример:
Это структура папок:
- PARENT FOLDER:
- 2014
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 2015
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
Тогда массив должен быть:
./2014
./2014/01
./2014/02
./2014/03
./2014/04
./2014/05
./2014/06
./2014/07
./2014/08
./2014/09
./2014/10
./2014/11
./2014/12
./2015
./2015/01
./2015/02
./2015/03
./2015/04
./2015/05
./2015/06
./2015/07
./2015/08
./2015/09
./2015/10
./2015/11
./2015/12
Заказ не важен. Массив не будет содержать файлы. Только реж.
Как я могу сделать это быстрее?
Спасибо вам всем!!!
Попробуйте использовать DirectoryIterator
, Это должно быть намного быстрее.
function expandDirectories2($path) {
$directories = array();
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
if ($fileinfo->isDir() && !$fileinfo->isDot()) {
$directories[]= $fileinfo->getPathname();
$directories = array_merge($directories, expandDirectories2($fileinfo->getPathname()));
}
}
return $directories;
}
Проверьте больше информации здесь: http://php.net/manual/en/class.directoryiterator.php
Других решений пока нет …