Jump to content
marcossantana10

Listagem de diretório

Recommended Posts

Queria saber se é possível alterar a ordem com que os subdiretórios de um diretório é listado. Exemplo:

 

Tenho um diretório raiz que possuem os seguintes diretórios: 2013, 2014, 2015, [...].

Tem como fazer com que eles sejam mostrados em uma ordem específica?

 

Código que tô usando:

$baseDir = 'diretorio/'.$dirDinamico;
$abreDir = (@$_GET['dir'] != '' ? $_GET['dir'] : $baseDir);

$strrdir = strrpos(substr($abreDir,0,-1),'/');
$backdir = substr($abreDir, 0,$strrdir+1);

$openDir = dir($abreDir);

while($arq = $openDir -> read()):
    if($arq != '.' && $arq != '..'):
        if(is_dir($abreDir.$arq)){

        //aqui é a parte que organizo (visualmente) a exibição dos diretórios.

 

Edited by Gabriel Heming
adicionar marcação de código

Share this post


Link to post
Share on other sites

Utilizando DIR não há como.

 

Você pode utilizar a função glob , que lhe retornará um array, conforme o padrão de busca, e realizar o sort (usort) nesse array.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lucas_gabriel
      Olá, boa noite!
      Gostaria de saber como faço para bloquear o acesso direto a diretórios? Por exemplo tem vários arquivos dentro de um diretório, passo o link para o usuário acessar um arquivo especifico mas não quero que ele consiga entrar no diretório e liste todos os arquivos que tem lá. Como eu faria para realizar essa restrição?
    • By Alex Dias
      Olá amigo, não sou usuário avançado, conseguir um código-fonte que lista arquivos de uma pasta no servidor, esses fontes listavam apenas os arquivos, daí eu dei uma incrementada nele para além dos arquivos ele listar também o tamanho do arquivo e a data da última modificação, segue ANEXO como ele está exibindo os resultados com perfeição.

      A minha dificuldade é que ele lista os arquivos da pasta por ordem alfabética de A a Z e eu gostaria muito que essa lista de arquivos fosse exibida por ordem de data de modificação decrescente, da mais atual para a mais antiga, e não estou conseguindo realizar essa tarefa, gostaria muito da ajuda dos amigos para solucionar esse ocorrido, desde já agradeço a ajuda de todos.

      Segue o código-fonte

       
      <?php //$diretorio = "D:\SERVIDOR-APACHE\PATRIMONIO TECNOLOGIA\images"; $diretorio = "/home/patrimonio/www/sites/default/files/ftpdata/download/Acesso Remoto"; //USADO PARA LISTAR OS ARQUIVOS DA PASTA $url = "sites/default/files/ftpdata/download/Acesso Remoto/"; // USADO PARA FAZER O LINK DE DOWNLOAD // abre o diretório $ponteiro = opendir($diretorio); // monta os vetores com os itens encontrados na pasta while ($nome_itens = readdir($ponteiro)) { $itens[] = $nome_itens; } // ordena o vetor de itens sort($itens); // percorre o vetor para fazer a separacao entre arquivos e pastas foreach ($itens as $listar) { // retira "./" e "../" para que retorne apenas pastas e arquivos if ($listar!="." && $listar!=".."){ // checa se o tipo de arquivo encontrado é uma pasta if (is_dir($listar)) { // caso VERDADEIRO adiciona o item à variável de pastas $pastas[]=$listar; } else{ // caso FALSO adiciona o item à variável de arquivos $arquivos[]=$listar; } } } // lista as pastas se houverem if ($pastas != "" ) { foreach($pastas as $listar){ print "";} } // lista os arquivos se houverem if ($arquivos != "") { foreach($arquivos as $listar){ //CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB $tamanho = filesize("$url/$listar"); $kb = "1024"; $mb = "1048576"; $gb = "1073741824"; $tb = "1099511627776"; if($tamanho<$kb){ $tamanho_resposta = ($tamanho." bytes"); }else if($tamanho>=$kb&&$tamanho<$mb){ $kilo = number_format($tamanho/$kb,2); $tamanho_resposta = ($kilo." KB"); }else if($tamanho>=$mb&&$tamanho<$gb){ $mega = number_format($tamanho/$mb,2); $tamanho_resposta = ($mega." MB"); }else if($tamanho>=$gb&&$tamanho<$tb){ $giga = number_format($tamanho/$gb,2); $tamanho_resposta = ($giga." GB"); } // FIM CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB // DATA DA ULTIMA MODIFICACAO $modificado = date("d/m/Y H:i:s", filemtime("$url/$listar"))."<br>"; // FIM DATA DA ULTIMA MODIFICACAO //echo"$modificado"; // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO echo" <tr> <td width='438' height='30' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;<a href='$url/$listar' target='_blank'>$listar</a></font></p></td> <td width='192' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$tamanho_resposta</font></p></td> <td width='340' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$modificado</font></p></td> <td width='202' bgcolor='#ffffff'><p align='center'><a href='$url/$listar' target='_blank'><img src='images/nuvem.jpg'/></a></p></td> </tr> "; } } else { echo "<p><font color='#ff0000' size='3'>Não há nenhum arquivo.</font><p><br>"; } echo"</table>" ?>  

    • By wanderleyalves
      Olá, estou começando a aprender o php e quero muito saber como busco um arquivo pdf em um diretório usando o login que e o cpf como texto para busca, ja fiz a tela de login, o formulario de busca  e o mostra resultado em php usando a função glob http://php.net/manual/pt_BR/function.glob.php, que encontra qualquer arquivo com o nome que escrever no campo busca, porem gostaria que ao logar já mostrasse o arquivo daquele usuário sem ter que buscar por ele, se o usuário buscar por 1, mostra todos os arquivos que contem 1 no nome.
       
      exemplo:
      Login do usuario 1 CPF:11111111111 senha ******
      Diretório: /arquivos/ 11111111111.pdf
       
      Login do usuario 2 CPF:22222222222 senha ******
      Diretório: /arquivos/22222222222.pdf
       
      mostra_busca.php
      <?php $arquivo = $_POST['arquivo']; $nome = "$arquivo"; $dir = 'cedulas/'; $arquivos_pattern = glob($dir . $nome . "*.*"); $i = 0; if($arquivos_pattern !== false) { foreach($arquivos_pattern as $arquivo) { echo "<a href=\"".$arquivo."\">" . basename($arquivo) . "</a><br />"; $i++; } echo $i > 0 ? "<br>" : NULL; } echo $nome_user; echo ", foram encontrados <strong>".$i."</strong> registros clique no link para imprimir"; ?>  
    • By Nandolou
      Bom dia pessoal, alguém pode me ajudar ? (Sou iniciante KKK)
      Tenho uma página em HTML (index.htm) para upload de arquivos e imagens com o seguinte código:
      <form action="envia_foto.php" method="post" enctype="multipart/form-data">   <div align="center">        <p> </p>        <p>          <input type="file" name="Arquivo" id="Arquivo">          <br>             </p>        <p>          <input type="submit" value="Enviar">                            </p>    </div>  </form> ,........
      E tenho a página em PHP (envia_foto.php) com o seguinte código
      ........
      <html> <head> <title>Envia foto</title> </head> <body> <?php $nome_temporario=$_FILES["Arquivo"]["tmp_name"]; $nome_real=$_FILES["Arquivo"]["name"]; copy($nome_temporario,"up/$nome_real"); ?> <p align="center"><font size="7">Arquivo enviado com sucesso ! </font></p> </body> </html> A questão é a seguinte..
      Gostaria de inserir um campo na página HTML que tem os botões de selecionar e enviar, que eu possar inserir um número, e que o arquivo que a pessoa está enviando seja renomeado com esse numero, ficando por exemplo 123.jpg o que antes seria IMG_20181010_1530.jpg, e um outro campo de caixa de seleção onde eu coloque os caminhos que possa ser salvo, no caso as pastas com nomes.
      Caso possam me ajudar eu agradeço ... Esse código atual já está rodando só que salvando o nome original da imagem e em uma única pasta
      .....
      As imagens que anexei é de como está, de como desejo que esteja, e como comecei a a fazer o código mas não sei mesclar com o formulário atual 



×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.