Я работаю с рекурсивными итераторами PHP SPL, они меня довольно смущают, но я учусь.
Я использую их в проекте, где мне нужно рекурсивно получить все файлы и исключить папки из моего результата. Я изначально использовал этот метод ...
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir()) {
//skip directories
//continue;
}else{
// process files
}
}
Но затем пользователь SO предложил использовать этот метод, чтобы мне не нужно было использовать метод isDir()
в моем цикле ...
$directory = new RecursiveDirectoryIterator($path,
RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::LEAVES_ONLY);
Обратите внимание, что я использовал RecursiveDirectoryIterator::SKIP_DOTS
в конструкторе RecursiveDirectoryIterator
, который должен пропускать папки или .
и ..
Теперь я в замешательстве, потому что после некоторого теста, даже без использования RecursiveDirectoryIterator::SKIP_DOTS
, кажется, он не показывает их, я использую Windows, может ли это быть причиной, точки отображаются только в системе типа Unix? Или я запутался до такой степени, что что-то упустил?
Также при использовании RecursiveIteratorIterator::LEAVES_ONLY
вместо RecursiveIteratorIterator::CHILD_FIRST
это остановит отображение папок в моем результате, чего я и хочу, но я не понимаю, почему? В документации нет информации об этом