Reputation: 5789
I have a recursiveDirectoryIterator like this:
$theme_iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($theme_folder_path)
);
foreach ($theme_iterator as $file_object) {
// Stuff
}
The problem is that it iterates into the .svn hidden folders. How can I prevent this?
Edit:
I can't just add something like this in the foreach because the files from the hidden folder are allready in the array at that point and they are not all hidden.
if (strpos($file_object, ".") ===0) {
continue;
}
Upvotes: 3
Views: 2699
Reputation: 1
Here is another approach using RecursiveCallbackFilterIterator
:
<?php
function iterate(string $path): object {
function filter(object $info): bool {
if ($info->isFile()) {
return true;
}
return $info->getFilename()[0] !== '.';
}
$RDI = new RecursiveDirectoryIterator($path);
$RCFI = new RecursiveCallbackFilterIterator($RDI, 'filter');
return new RecursiveIteratorIterator($RCFI);
}
foreach (iterate('.') as $info) {
echo $info->getPathname(), "\n";
}
https://php.net/class.recursivecallbackfilteriterator
Upvotes: 1
Reputation: 3611
If your want to do it in a single line :
$iterator = new RecursiveDirectoryIterator($path_directory, RecursiveDirectoryIterator::SKIP_DOTS);
Upvotes: -1
Reputation: 5260
Set flag
RecursiveDirectoryIterator::SKIP_DOTS
to exlude files:
$iterator = new RecursiveDirectoryIterator($theme_folder_path);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$theme_iterator = new RecursiveIteratorIterator(
$iterator
);
Upvotes: 3
Reputation: 2230
<?php
class RecursiveDotFilterIterator extends RecursiveFilterIterator
{
public function accept()
{
return '.' !== substr($this->current()->getFilename(), 0, 1);
}
}
$iterator = new RecursiveIteratorIterator(
new RecursiveDotFilterIterator(
new RecursiveDirectoryIterator('.')
)
);
foreach ($iterator as $x) {
//do stuff
}
Upvotes: 5