Jump to content

Faster way to list dir ?


Peuplarchie

Recommended Posts

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
Share on other sites

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
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.