Peuplarchie Posted November 29, 2008 Share Posted November 29, 2008 Good day to you all, I have a piece of code which read a directory and return a list of file and folders that is with in recursively. This code is very slow. Maybe you can help me make it go faster ? <!doctype html public "-//w3c//dtd html 3.2//en"> <?php function CountDir($aDir, $aRecurse) { $Count = 0; $d = dir($aDir); while ($Entry = $d->Read()) { if (!(($Entry == "..") || ($Entry == "."))) { if (Is_Dir($aDir . '/' . $Entry)) { if ($aRecurse) { $Count += CountDir($aDir . '/' . $Entry, $aRecurse); } } else { $Count++; } } } return $Count; } 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. $rest = substr($file, 0, -4); if( is_dir( "$path/$file" ) ){ // Its a directory, so we need to keep reading down... echo '<tr><td align="left"><a href="'.$path.'/'.$file.'" align="left" class="white00" target="image">'.$spaces.'<img src="folder_icon.gif" border="0"> '.$file.'</a> - '.CountDir($path.'/'.$file, False).' </td></tr>'; getDirectory( "$path/$file", ($level+1) ); // Re-call this same function but on a new directory. // this is what makes function recursive. } else { // Just print out the filename } } } closedir( $dh ); // Close the directory handle } getDirectory( "." ); // Get contents of the "files/includes" folder ?> Thanks ! Link to comment https://forums.phpfreaks.com/topic/134780-faster-way-to-list-dir/ Share on other sites More sharing options...
adx Posted December 3, 2008 Share Posted December 3, 2008 If you just want to list the contents of a directory you could do this. <?php foreach (glob("*.*") as $filename) { echo "".$filename."<br/>";} ?> Or as links like this. <?php foreach (glob("*.*") as $filename){ echo "<a href=\"".$filename."\">".$filename."</a>";} ?> If you want to you could also set a specific filetype by changing glob("*.*") to glob("*.php"). Or all files and folder with glob("*"). Is this what you mean? I didn't take the time to look over all your code. Link to comment https://forums.phpfreaks.com/topic/134780-faster-way-to-list-dir/#findComment-705177 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.