Revision: 15623
Updated Code
at September 23, 2009 02:02 by DrewDouglass
Updated Code
<?php
$path = realpath('/etc');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
echo "$name\n";
}
?>
Revision: 15622
Updated Code
at July 12, 2009 04:01 by DrewDouglass
Updated Code
<?php
//New version added, see the reply about halfway down, located in the original url.
//This functions is indeed much faster.
function get_dir_iterative($dir = '.', $exclude = array( 'cgi-bin', '.', '..' ))
{
$exclude = array_flip($exclude);
if(!is_dir($dir))
{
return;
}
$dh = opendir($dir);
if(!$dh)
{
return;
}
$stack = array($dh);
$level = 0;
while(count($stack))
{
if(false !== ( $file = readdir( $stack[0] ) ) )
{
if(!isset($exclude[$file]))
{
print str_repeat(' ', $level * 4);
if(is_dir($dir . '/' . $file))
{
$dh = opendir($file . '/' . $dir);
if($dh)
{
print "<strong>$file</strong><br />\n";
array_unshift($stack, $dh);
++$level;
}
}
else
{
print "$file<br />\n";
}
}
}
else
{
closedir(array_shift($stack));
--$level;
}
}
}
?>
<?php
//This was the original snippet added to snipplr
function getDirectory( $path = '.', $level = 0 ){
$ignore = array( 'cgi-bin', '.', '..' );
// Directories to ignore when listing output. Many hosts
// will deny PHP access to the cgi-bin.
$dh = @opendir( $path );
// Open the directory to the handle $dh
while( false !== ( $file = readdir( $dh ) ) ){
// Loop through the directory
if( !in_array( $file, $ignore ) ){
// Check that this file is not to be ignored
$spaces = str_repeat( ' ', ( $level * 4 ) );
// Just to add spacing to the list, to better
// show the directory tree.
if( is_dir( "$path/$file" ) ){
// Its a directory, so we need to keep reading down...
echo "<strong>$spaces $file</strong><br />";
getDirectory( "$path/$file", ($level+1) );
// Re-call this same function but on a new directory.
// this is what makes function recursive.
} else {
echo "$spaces $file<br />";
// Just print out the filename
}
}
}
closedir( $dh );
// Close the directory handle
}
?>
Revision: 15621
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 12, 2009 03:41 by DrewDouglass
Initial Code
<?php
function getDirectory( $path = '.', $level = 0 ){
$ignore = array( 'cgi-bin', '.', '..' );
// Directories to ignore when listing output. Many hosts
// will deny PHP access to the cgi-bin.
$dh = @opendir( $path );
// Open the directory to the handle $dh
while( false !== ( $file = readdir( $dh ) ) ){
// Loop through the directory
if( !in_array( $file, $ignore ) ){
// Check that this file is not to be ignored
$spaces = str_repeat( ' ', ( $level * 4 ) );
// Just to add spacing to the list, to better
// show the directory tree.
if( is_dir( "$path/$file" ) ){
// Its a directory, so we need to keep reading down...
echo "<strong>$spaces $file</strong><br />";
getDirectory( "$path/$file", ($level+1) );
// Re-call this same function but on a new directory.
// this is what makes function recursive.
} else {
echo "$spaces $file<br />";
// Just print out the filename
}
}
}
closedir( $dh );
// Close the directory handle
}
?>
Initial URL
http://us2.php.net/manual/en/class.recursivedirectoryiterator.php
Initial Description
Takes advantage of the SPL. Much easier and maintainable than the previous revisions. Haven't done any benchmarks yet but I imagine it is much faster. "If you want to omit directories, remove the RecursiveIteratorIterator::SELF_FIRST part."
Initial Title
Recursive Directory Listing (Show full directory structure)
Initial Tags
php
Initial Language
PHP