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 ! Quote 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. Quote 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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.