Using RecursiveIteratorIterator to list files in folder is great. Can I get the parent path and full path as well?

StackOverflow https://stackoverflow.com/questions/15469053

  •  24-03-2022
  •  | 
  •  

Question

I need to list all files (which have certain extensions) in a folder and its sub-folders. I used RecursiveIteratorIterator as described in @Matthew 's great answer in PHP list all files in directory.

  • I'm setting the root of the search to ".." and all filenames get a prefix of "../". How can I get the filename only?
  • How can I get, in addition to the filename, its parent folder name?
  • ...and how can I get the full path of the filename?

And one last thing: displaying a file-tree, or maybe all directories that have no sub-directories, are both examples of things that one might want to do when dealing with files. How would you recommend to pass this data to the client side and how would the data structure look like?

Was it helpful?

Solution

$filename in that answer is actually not a string. It is an object of type SplFileInfo which can be used like a string but it also offers much more detailed info:

OTHER TIPS

Using this as a base:

$iter = new RecursiveDirectoryIterator('../');

foreach (new RecursiveIteratorIterator($iter) as $fileName => $fileInfo) {
   $fullPath = (string) $fileInfo;
}

Each $fileInfo will return a SplFileInfo object. The path and filename are easily accessible in addition to a host of other methods.

phpSplFileInfo Object
(
  [pathName:SplFileInfo:private] => ./t.php
  [fileName:SplFileInfo:private] => t.php
)

I may be mistaken, but to access the parent folder name unless you record it through the tree the simplest would be using dirname and appending ../ to the path.

<?php
    $iterator = new FilesystemIterator(dirname(__FILE__), FilesystemIterator::CURRENT_AS_PATHNAME);
    foreach ($iterator as $fileinfo) {
        echo $iterator->current()->getPathname() . "\n";
    }
 ?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top