downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

DirectoryIterator::current> <CachingRecursiveIterator::hasChildren
Last updated: Wed, 22 Jul 2009

view this page in

DirectoryIterator::__construct

(PHP 5)

DirectoryIterator::__construct — Constructs a new dir iterator from a path

Description

DirectoryIterator DirectoryIterator::__construct ( string $path )
Warning

This function is currently not documented; only the argument list is available.



add a note add a note User Contributed Notes
DirectoryIterator::__construct
pcdinh at phpvietnam dot net
13-Aug-2007 04:55
I need to traverse recursively through a directory tree and get all sub-directory paths and has written a snippet to do that.

<?php
$path
= "D:\webroot\phpvietnamcms";
foreach (new
RecursiveIteratorIterator(
           new
RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME), RecursiveIteratorIterator::CHILD_FIRST) as $file => $info) {
    if (
$info->isDir())
    {
        echo
$file."<br />";
    }
}

?>
goran at extensionsforjoomla dot com
21-Jun-2007 01:44
I needed to match in directory tree file name(s) by regular expression. Code is based on Marcus Börger class DirectoryTreeIterator http://cvs.php.net/viewvc.cgi/php-src/ext/spl/examples/ and on examples given in his lecture Introduction to object oriented PHP at PHP Quebec conference 2007 http://talks.somabo.de/
<?php
class KeyFilter extends FilterIterator
{
  private
$_rx;
 
  function
__construct(Iterator $it, $regex)
  {
   
parent::__construct($it);
   
$this->_rx= $regex;
  }

  function
accept()
  {
    return
ereg($this->_rx,$this->getInnerIterator()->key());
  }

  protected function
__clone() {
    return
false;
  }
}

class
DirMach extends KeyFilter
{
  function
__construct($path , $regex)
  {
   
parent::__construct(
    new
DirectoryTreeIterator($path), $regex);
  }

  function
current()
  {
    return
parent::key();
  }

  function
key()
  {
    return
parent::key();
  }
}

class
DirectoryTreeIterator extends RecursiveIteratorIterator
{
   
/** Construct from a path.
     * @param $path directory to iterate
     */
   
function __construct($path)
    {
     try {
     
parent::__construct(
            new
RecursiveCachingIterator(
                new
RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME
               
),
               
CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD
           
),
           
parent::SELF_FIRST
       
);
     } catch(
Exception $e) {
       echo
$e->getMessage();
       exit;
     }
    }

   
/** @return the current element prefixed with ASCII graphics
     */   
   
function current()
    {
      if (
$this->hasChildren())
       
$this->next(); 
      return
$this->key();
    }

   
/** Aggregates the inner iterator
     */   
   
function __call($func, $params)
    {
      return
call_user_func_array(array($this->getSubIterator(), $func), $params);
    }
}
$PathToSearch = 'path_to_search';
$regex = 'regular_expression';
$FileList = new DirMach($PathToSearch, $regex);
foreach (
$FileList as $file) {
 
$match[] = $file;
}
echo
'<pre>';
var_dump($match);
echo
'</pre>';
?>
pcdinh at phpvietnam dot net
19-Apr-2007 10:58
The use of this class is rather simple
<?php
$dataDir 
= dirname(__FILE__).'/world_vest_base/';
   
try
{
     
$dir  = new DirectoryIterator($dataDir);

      foreach (
$dir as $file)
      {
       
$fileName = $file->getFilename();
      }
}
catch (
Exception $ex)
{

}

?>

If $dataDir is null, a Runtime Exception will throws a message like this: Directory name must not be empty.

If $dataDir does not exist, that message will look like this:  failed to open dir: No such file or directory.

Please be careful in case you are looking for filenames in that directory because DirectoryIterator will return a very special symbolic filenames: . and .. You must do a check to ignore them before dealing with real file names.

$dir is a DirectoryIterator object

 
show source | credits | stats | sitemap | contact | advertising | mirror sites