Atualizado em 20 de Maio de 2013

Listar Arquivos Diretório PHP

Olá pessoal,

Neste post vamos ver como listar arquivos de um diretório com PHP, isso nos possibilita diversas finalidades, entre elas podemos destacar: criar sitemaps, adicionar links as pastas e arquivos entre outros.

Em nosso exemplo vamos fazer uma lista com todos os arquivos de uma pasta criando link para os mesmo. Vamos ao exemplo:

<?php
$pasta = 'imagens/';

if(is_dir($pasta))
 {
  $diretorio = dir($pasta);

  while(($arquivo = $diretorio->read()) !== false)
  {
   echo '<a href='.$pasta.$arquivo.'>'.$arquivo.'</a><br />';
  }

  $diretorio->close();
 }
else
 {
  echo 'A pasta não existe.';
 }
?>

Explicando o script:

Na linha 2 criamos uma variável que leva o nome da pasta na qual vamos fazer a leitura dos arquivos. Já na linha 4 verificamos se o nome da pasta que foi informado e realmente o caminho de um diretório.

Na Linha 6 criamos uma instância do diretório através do comando dir, após isso entre as linhas 8 e 11 começamos uma laço de repetição que irá percorrer toda a pasta listando os arquivos e criando links para os mesmo.

Pra finalizar na linha 13 fechamos a instância criada anteriormente (linha 6).


E isso aí pessoal, até a próxima.


Gostou do post, continue por dentro das dicas de programação!!! Assine a newsletter.

Tags:  Comandos PHP | PHP

Comentários

Sua foto do perfil

Gabriel Meinberg Renó

Muito Bom o Tutorial, simples e bem explicado

24 de Fevereiro de 2016 - 18:05

Sua foto do perfil

Rafael Casanova

Olá Mauricio, tudo bem?

Tem como listar arquivos, ou mesmo a quantidade de outro site? Digamos que esteja em um servidor local, e queira listar arquivos de uma pasta de um site com diretório aberto, como algum da globo.com ou terra.com como exemplos.

15 de Fevereiro de 2016 - 10:25

Sua foto do perfil

Mauricio Programador

Olá Rafael,

Sites como globo, terra entre outros não dão permissão para que façamos isso.

Existe uma configuração que os programadores fazer dentro de um arquivo chamado .htaccess para proteger este tipo de ação.

Para saber se o site deixa ou não fazer isso, basta coloca o endereço da pasta na barra de endereço do navegador e ver se ele exibe a listagem dos arquivos.

Abraço.

19 de Fevereiro de 2016 - 14:54

Sua foto do perfil

Arthur

Oi Mauricio! Tudo bem? :D Tem como esconder a extensão do arquivo?

12 de Janeiro de 2016 - 17:12

Sua foto do perfil

Mauricio Programador

Olá Arthur,

Você pode usar um código dentro do arquivos .htaccess para que usuários não possam visualizar o conteúdo que esta dentro da pasta quando tentarem acessar a pasta diretamente, mas dentro do HTML ele precisa ter para poder buscar o arquivos no seu local de origem.

Abraço.

13 de Janeiro de 2016 - 15:30

Sua foto do perfil

William

É muito difícil colocar um paginador nesse listador de arquivos Maurício? Se você ou alguém puder ajudar, agradeço. O script está muito bom!

06 de Janeiro de 2016 - 14:42

Sua foto do perfil

Mauricio Programador

Olá William,

lhe sugiro que faça paginação com o banco de dados, vai passar menos trabalho.

Abraço.

13 de Janeiro de 2016 - 15:15

Sua foto do perfil

GUILHERME IGOR FERNANDES DE SOUZA GARCIA SERRANO

querido mauricio,
estou estagiando solicitaram para fazer com que este script rode e façao o que tenha que fazer, porem nao estou conseguindo encontra-lo, tem como vc me a um forcinha, please.

26 de Outubro de 2015 - 13:26

Sua foto do perfil

Mauricio Programador

Olá Guilherme,

O meu sistema de comentário bloqueai quando o usuário coloca o código inteiro.

Coloque apenas a sua dúvida referente ao post acima para que eu posso visualizar e lhe responder de forma correta.

Abraço.

30 de Outubro de 2015 - 14:27

Sua foto do perfil

mayki

Como eu faço para listar as pastas ai quando eu clicar na pasta ele exiba as imagens dessa pasta tem como ?????

12 de Março de 2015 - 17:33

Sua foto do perfil

Mauricio Programador

Olá Mayki,

veja o post Listar Arquivos por Tipo com PHP, nele basta colocar a extensão que você quer que mostre na listagem.

abraço.

13 de Março de 2015 - 10:12

Sua foto do perfil

Domingos Coelho

Sugiro você alterar a linha do while para algo assim:

while(($arquivo = $diretorio->read()) !== false)

Pq se tiver uma pasta ou arquivo com o nome 0 (zero), o while irá parar mesmo ainda tendo arquivos na pasta

10 de Março de 2015 - 11:40

Sua foto do perfil

Mauricio Programador

Verdade Domingos,

Obrigado pela contribuição.

Abraço

11 de Março de 2015 - 11:41

Sua foto do perfil

Naldo

Mauricio, como eu faço para limitar a quantidade de aquivos que serão exibidos?

03 de Março de 2015 - 21:15

Sua foto do perfil

Mauricio Programador

Olá Naldo,

Se você quiser somente limitar por um numero x pode colocar um contador.

$i = 1;
while($arquivo = $diretorio->read())
{
if($i == 5){
break;
}else{
...
$i++;
}
}

Se não ajudar me avisa.

Abraço.

04 de Março de 2015 - 09:19

Sua foto do perfil

Uhelliton Andrade Silva

Obrigado Mauricio, me ajudou muito. Deus o abençoe...

11 de Janeiro de 2015 - 00:05

Sua foto do perfil

Edcarlo Lima

Olá Mauricio,

Tenho uma pasta com vários arquivos .txt

Usei o read() e o glob() para pegar/listar esses arquivos. Porém só apareceu:
.
..

14 de Outubro de 2014 - 12:58

Sua foto do perfil

Mauricio Programador

Olá Edcarlo,

Veja se realmente o PHP esta lendo a pasta onde esta os arquivos, nesta linha:

$pasta = 'imagens/';

Abraço.

15 de Outubro de 2014 - 09:47

Sua foto do perfil

Leandro

Boas... estou tendo problema com arquivos que contem espaços nos nomes...
EX, 1234.pdf abre legal ai "Juao Algusto.pdf" da erro :(
como o "gerador" desses arquivos "obrigatoriamente" gera com espaços to me matando aqui.

20 de Julho de 2014 - 08:44

Sua foto do perfil

Mauricio Programador

Olá Leandro,

O pior e que as notícias não são das melhores (hehehehehe), arquivos que tenham em seu nome acentos, espaços e etc sempre darão problemas e não so neste tipo de operação.

Não a possibilidade de ajusta o script que gera os nomes?

Abraço.

21 de Julho de 2014 - 15:32

Sua foto do perfil

Luiz

Não entendi a logica de while($arquivo = $dir->read()){}
enquanto arquivo e qual...?

01 de Junho de 2014 - 00:03

Sua foto do perfil

Mauricio Programador

Olá Luiz,

Enquanto o comando read() ler e devolver um arquivo o while será executado. E a variável arquivo pega o arquivo que o comando leu quando ele existir.

Abraço.

02 de Junho de 2014 - 13:59

Sua foto do perfil

heitor

Boa tarde amigo
vc poderia me mandar as pastas
Obrigado

07 de Maio de 2014 - 16:37

Sua foto do perfil

Mauricio Programador

Olá Amigo,

na verdade você pode fazer isso com qualquer pasta. Eu não tenho aqui mais a pasta deste exemplo, mas pode ser com qualquer uma que ele irá dar o retorno da mesma forma.

Grande abraço.

08 de Maio de 2014 - 10:00

Sua foto do perfil

MARCELO BRANCO

Sou seu fã. Abraços...

30 de Abril de 2014 - 14:08

Sua foto do perfil

Lucas

Mauricio, quando a listagem é feita.. notei que juntamente com os arquivos
também é listado os "níveis" das pastas acima
Exemplo
"."
".."

como faço para tirar esses dois elementos da minha listagem?

03 de Abril de 2014 - 10:26

Sua foto do perfil

Mauricio Programador

Olá Lucas,

faça uma pequena mudança no script, assim:

...
while($arquivo = $diretorio->read())
{
 if($arquivo != '..' && $arquivo != '.')
 {
  echo '<a href='.$pasta.$arquivo.'>'.$arquivo.'</a><br />';
 }
}
...

Abraço.

03 de Abril de 2014 - 10:52

Sua foto do perfil

Dante Marcelo

E aí Maurício, blz?
Cara, achei na web como mostrar o conteúdo de um diretório através do glob();.
É correto usar isso? Há algum porém?

31 de Janeiro de 2014 - 11:10

Sua foto do perfil

Mauricio Programador

Olá Dante,

na verdade são dois comandos que realizam o mesmo processo, porém o glob() tem alguns parâmetros que podem ser usados para filtrar o tipo de arquivos que serão listados. Exemplo se você quiser pegar somente arquivos do tipo txt você colocaria assim glob("*.txt").

Grande abraço.

31 de Janeiro de 2014 - 11:18

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER