function dir_tree($dir, $durl = '', $include = '', $exclude = '', $dirinclude = '', $direxclude = '') { static $seen = array(); $files = array(); $dir = realpath($dir); if (isset($seen[$dir])) { return $files; } $seen[$dir] = TRUE; $dh = @opendir($dir); while ($dh && ($file = readdir($dh))) { if ($file !== '.' && $file !== '..') { $path = realpath($dir . '/' . $file); $url = $durl . '/' . $file; if ($dirinclude && !preg_match($dirinclude, $url) || $direxclude && preg_match($direxclude, $url)) { continue; } if (is_dir($path)) { if ($subdir = RheinaufFile::dir_tree($path, $url)) { $files[] = array('url' => $url, 'children' => $subdir); } } elseif (is_file($path)) { if ($include && !preg_match($include, $url) || $exclude && preg_match($exclude, $url)) { continue; } $files[] = array('url' => $url); } } } @closedir($dh); return RheinaufFile::dirsort($files); }