Search code examples
phpdir

Limit shown directories in PHP


How can I show a folder's limit in a directory using PHP? The code below shows all folders but I only want to see 10 folders.

function folderlist() {
  $startdir = './';
  $ignoredDirectory[] = '.';
  $ignoredDirectory[] = '..';
  if(is_dir($startdir)) {
    if($dh = opendir($startdir)) {
      while(($folder = readdir($dh)) !== false) {
        if(!(array_search($folder, $ignoredDirectory) > -1)) {
          if(filetype($startdir.$folder) == "dir") {
            $mtime = filemtime($startdir.$folder);
            $directorylist[$mtime]['name'] = $folder;
            $directorylist[$mtime]['path'] = $startdir;
          }
        }
      }

      closedir($dh);
    }
  }

  krsort($directorylist, SORT_NUMERIC);
  return $directorylist;
}

$folders = folderlist();
foreach($folders as $folder) {
  $path = $folder['path'];
  $name = $folder['name'];

  echo '<div class="urbangreymenu"><ul><li><a href="'.$path.'index.php?wallpapers='.$name.'" target="_parent">'.$name.'</a></li></ul></div>';
}

Solution

  • Change three lines:

    function folderlist($limit = 10) {
    

    and ...

    while (($folder = readdir($dh)) !== false && $limit) {
    

    and...

    $limit--;
    

    Together:

    function folderlist($limit = 10) {
        $startdir = './';
        $ignoredDirectory[] = '.'; 
        $ignoredDirectory[] = '..';
        if (is_dir($startdir)) {
            if ($dh = opendir($startdir)) {
                while (($folder = readdir($dh)) !== false && $limit) {
                    if (!(array_search($folder,$ignoredDirectory) > -1)) {
                        if (filetype($startdir . $folder) == "dir") {
                            $mtime = filemtime($startdir . $folder);
                            $directorylist[$mtime]['name'] = $folder;
                            $directorylist[$mtime]['path'] = $startdir;
                            $limit--;
                        }
                    }
                }
                //Rest of code unchanged...