vini_loock Postado Janeiro 16, 2011 Denunciar Share Postado Janeiro 16, 2011 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.phpQualquer ajuda é bem vinda.Vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david.lyonnais Postado Janeiro 16, 2011 Denunciar Share Postado Janeiro 16, 2011 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; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vini_loock Postado Janeiro 17, 2011 Autor Denunciar Share Postado Janeiro 17, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 SK15 Postado Janeiro 17, 2011 Denunciar Share Postado Janeiro 17, 2011 (editado) É 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 Janeiro 17, 2011 por SK15 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vini_loock Postado Janeiro 17, 2011 Autor Denunciar Share Postado Janeiro 17, 2011 (editado) 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 Janeiro 17, 2011 por vini_loock Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
vini_loock
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:
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
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.