Ir para conteúdo
Fórum Script Brasil
  • 0

Listar todas sub-pastas de um diretório


vini_loock

Pergunta

Olá galera!

Estou precisando listar todas as pastas, sub-pastas, sub-sub-pastas e assim sucessivamente.. de um diretório, mas não estou conseguindo, ele entra em while infinito e depois de um tempo me diz que a página não foi encontrada.

Esse é o sódigo:

function lista($pasta){
            $open = opendir($pasta);
            while($arquivos = readdir($open)){
                $arquivo[] = $arquivos;
            }
            sort($arquivo);
            foreach($arquivo as $valor){
                if(is_dir($pasta.$valor)){
                    $pastas[] = $valor;
                }
            }
            if($pastas != ''){
                echo '<ul>';
                for($i = 0; $i < count($pasta); $i++){
                    echo '<li><a href="exibe.php?dir='.$pasta.$pastas[$i].'" target="exibe">'.$pastas[$i].'</a>';
                    lista($pasta.$pastas[$i]);
                    echo '</li>';
                }
                echo '</ul>';
            }
        }
    
        lista('../../user/1601201109130098/');

A estrutura está +/- assim:

pasta raiz

----user/1601201109130098/ --que é a pasta principal que eu pretendo abrir e listar

----user/1601201109130098/images/

----user/1601201109130098....(não vou escrever todas, mas tem cerca de 10 pastas.)

----programa/explorar/aqui está meu script.php

Qualquer ajuda é bem vinda.

Vlw

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Se está entrando no loop infinito o erro deve estar no while.

/* Esta é a forma correta de varrer o diretório */
while (false !== ($arquivos = readdir($open))) {
$arquivo[] = $arquivos;
}
/* Esta é a forma INCORRETA de varrer o diretório */
while ($arquivos = readdir($open)) {
$arquivo[] = $arquivos;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Tentei também, mas continuou a mesma coisa.

Fiz um aqui, que até funciona, mas ele não faz a listagem dos sub-diretorios automatica, ou seja, não serve para muita coisa.

<?php
        $raiz = '../../user/1601201109130098/';
        $open = opendir($raiz);
        $arquivo = array();
        $pasta = array();
        while($arquivos = readdir($open)){
            $arquivo[] = $arquivos;
        }
        sort($arquivo);
        foreach($arquivo as $valor){
            if(is_dir($raiz.$valor) && $valor != '.' && $valor != '..'){
                $pasta[] = $valor;
            }
        }
        echo '<ul><li><a href="exibe.php?dir='.$raiz.'" target="exibe">Meus arquivos</a>';
        if($pasta != ''){
            echo '<ul>';
                for($i = 0; $i < count($pasta); $i++){
                    echo '<li><a href="exibe.php?dir='.$raiz.$pasta[$i].'" target="exibe">'.$pasta[$i].'</a></li>';
/*Eu deveria fazer listagem dos subdiretorios aqui*/
                }
            echo '</ul>';
        }
        echo '</li></ul>';
    ?>

Ta comentado ali onde deveria fazer o while para buscar os subdiretorios.

Link para o comentário
Compartilhar em outros sites

  • 0

É so pensar um pouco :P, basta fazer um loop recursivo e voalá :P

<?php

function Show_files($local) {
 if (!$local) { return false; }

 if (!is_dir($local)) { 
  echo '<li><a href="exibe.php?dir=' . $local . '" target="exibe">' . $local . '</a></li>';
 } else {
  $dir = opendir($local);
  while ($file = readdir($dir)) {
   if ($file != "." && $file != ".." && $file != ".htaccess") {
    Show_files(($local . "/" . $file));
    unset($file);
   }
  }
  closedir($dir);
  unset($dir);
 }
}

Show_files("C:");

?>

Editado por SK15
Link para o comentário
Compartilhar em outros sites

  • 0

Putz.. eu tentei fazer coisas parecidas, mas eu acho que eu não estava concatenando direito as pastas, ai ficava sempre na pasta raiz.

Agora ficou assim:

<?php
    function Show_files($local){
        if(is_dir($local)){ 
            echo '<ul>';
            $open = opendir($local);
            while($folder = readdir($open)){
                if(is_dir($local.$folder) && $folder != '.' && $folder != '..'){
                    echo '<li><a href="exibe.php?dir='.$local.$folder.'" target="exibe">'.$folder.'</a><ul>';
                        Show_files($local.$folder.'/');
                    echo '</ul></li>';
                }
            }
            echo '</ul>';
        }
    }
    $raiz = '../../user/1601201109130098/';
    echo '<ul class="principal"><li><a href="exibe.php?dir='.$raiz.'" target="exibe">Pasta raiz</a>';
    Show_files($raiz);
    echo '</li></ul>';
?>

Resolvido

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...