按顺序扫描所有目录和文件

时间:2016-06-21 21:23:30

标签: php scandir

我为这个糟糕的代码花了(浪费)2天(可能没什么错误)

$diretc [] = ('../documentos');
    $txt = "";

    function getDirContents($diret){
        for ($i=0; $i <sizeof($diret) ; $i++) { 
            $dir = $diret[$i];
            if(is_dir($dir)){ //lee si es un directorio
                $GLOBALS['txt'] .= '<ul>'.$dir;
                while(($archivo = readdir($dir)) !== false){
                    if (is_dir($archivo)) {
                        $directorios[] = $archivo;
                    }
                    else if ($archivo != "." && $archivo != "..") {
                        $GLOBALS['txt'] .= '<li>'.$dir.DIRECTORY_SEPARATOR.$archivo.'</li>';
                    }
                }
                $GLOBALS['txt'] .='</ul>';
            }
        }
        if (sizeof($directorios) > 0) {
            getDirContents($directorios);
        }
        return $txt;    
    }





echo getDirContents($diretc);

我尝试使用路径中的文件列出每个目录 documentos 我想按顺序列出所有这些目录,例如文件管理器,如this

这样的树

1 个答案:

答案 0 :(得分:0)

尝试提供帮助。请尝试以下代码。

function listDir($path, $recursive = false) {
    $recursive = ( $recursive === true );
    $invalidPaths = array( '.', '..' );
    $valid = is_dir($path);
    if ($valid !== true) {
        return array();
    }
    $array = array();
    foreach(scandir($path) as $file) {
        // Check for invalid paths
        $invalid = in_array( $file, $invalidPaths );
        if ($invalid === true) {
            continue;
        }
        // Format and add file
        $filename = "$path/$file";
        array_push($array, $filename);

        // Check for read dir recursive
        $isDirectory = is_dir($file);
        if ($isDirectory && !$recursive) {
            continue;
        }

        // Add itens
        $subDirArray = listDir($filename, $recursive);
        $array = array_merge($array, $subDirArray);
    }
    return $array;
}

$path = '../documentos';
$pathList = listDir($path, true);
foreach($pathList as $item) {
    echo "<pre>$item</pre>";
}