0

Listando o conteúdo de um diretório com PHP

criado por Victor Henrique em 18/12/2003 10:37am
Em algumas vezes em nossas humildes vidas de programadores nos deparamos com situações onde temos que listar diretórios por algum motivo.

Isto é muito útil, por exemplo, quando queremos fazer um álbum de fotos, sistema de donwloads sem banco de dados ou algo do gênero.

Pesquisamos e pesquisamos... Muitas vezes sem encontrar nenhuma solução válida.

Depois de muito tempo de pesquisa para fazer um sistema estilo álbum de fotos, encontrei a solução, um comando bem simples que lista o conteúdo inteiro de um diretório(se você quiser). Para selecionar apenas os arquivos que eu queria, usei um "if".

Segue abaixo um comando simples para listar todas as fotos do diretório "imagens", uma subpasta do diretório onde está o "album.php".


<?php

// variável que define o diretório das imagens
$dir = "./imagens";

// esse seria o "handler" do diretório
$dh = opendir($dir);

// loop que busca todos os arquivos até que não encontre mais nada
while (false !== ($filename = readdir($dh))) {
// verificando se o arquivo é .jpg
if (substr($filename,-4) == ".jpg") {
// mostra o nome do arquivo e um link para ele - pode ser mudado para mostrar diretamente a imagem :)
echo "<a href=\"$filename\">$filename</a><br>";
}
}

?>


Simples, não? Acho que isso será muito útil a todos, já que um handler de diretórios pode fazer muitas coisas por você. :)

Lembre-se de sempre colocar um "if" pois esta estrutura sempre vai ter retornar aqueles falsos arquivos "." e "..", úteis para o sistema operacional, mas não para você.

Até a próxima, um abraço a todos. Qualquer coisa é só comentar que vou respondendo assim que possível!

Comentários:

Mostrando 1 - 10 de 33 comentários
Jefrey disse:
Este código é melhor:
<?php
$diretorio = "public"; 
$ponteiro  = opendir($diretorio);
while ($nome_itens = readdir($ponteiro)) {
    $itens[] = $nome_itens;
}
sort($itens);
foreach ($itens as $listar) {
   if ($listar!="." && $listar!=".."){ 
   		if (is_dir($listar)) { 
			$pastas[]=$listar; 
		} else{ 
			$arquivos[]=$listar;
		}
   }
}
if ($pastas != "" ) { 
foreach($pastas as $listar){
   print "<img src='pasta.png'> <a href='$diretorio/$listar'>$listar</a><br>";}
   }
if ($arquivos != "") {
foreach($arquivos as $listar){
   print " - <a href='$diretorio/$listar'>$listar</a><br>";}
   }
?>

Além disso, cuidado com os direitos autorais, amigo. Esse seu artigo foi retirado de http://www.htmlstaff.org/ver.php?id=16327 e não é de sua autoria.
01/10/2010 2:38pm (~13 anos atrás)

eden alves disse:
o codigo funcionou certinho, estou adaptando ele para interagir com o flash, preciso que ele retorne para o flash o numero de arquivos encontrados no diretorio, entao acrecentei uma variavel que vai contando cada vez que é encontrado um arquivo jpg. o problema é que ele me retorna um numero que nao pode ser utilizado pelo flash. notei que o php envia para o flash uma string ao inves de um numero. e eu preciso comparar a variavel contador do php com um numero que tenho no flash. Entao converti o numero do flash para uma string para que fosse comparada com a variavel do php e mesmo assim nao funcionou, porque notei que a variavel do php vem seguida de alguns espaços em brando.
segue o codigo:

<?php
// variaveis que devem ser enviadas do flash
//$pasta
// variável que define o diretório das imagens
$dir = $pasta;
// esse seria o "handler" do diretório
$dh = opendir($dir);
// define o inicio da contagem
$contador=0;
// loop que busca todos os arquivos até que não encontre mais nada
while (false !== ($filename = readdir($dh))) {
// verificando se o arquivo é .jpg
if ((substr($filename,-4) == ".JPG")||(substr($filename,-4) == ".jpg")||(substr($filename,-4) == ".jpeg")||(substr($filename,-4) == ".JPEG")) {
$contador++;
}
}
// envia a resposta para o flash
echo "resposta=$contador";
?>

alguem pode me ajudar.

resolveria se o php enviasse valores numericos para o flash e nao string, ou se o php eliminasse os espaços em branco que vem apos a variavel $contador

fico no aguardo

abraços
21/08/2006 5:40am (~17 anos atrás)

como que eu faço pra visualizar a imagem mesmo com paginação...
26/03/2006 12:43pm (~18 anos atrás)

Bom não sei nada de php mais programei um pouquinho jah e pelo pouco que sei acho que no caso do script para o upload de arquivos seria mais sensato tentar checar se o arquivo já existe com uma função mais adequada como file_exists (http://br.php.net/manual/pt_BR/function.file-exists.php)
, ao inves de listar todos os arquivos do diretorio, criar uma array do demonio ai depois procurar nessa array ainda... bom é o que eu acho, corrijam-me se estiver errado.
Abraços
06/03/2006 7:32pm (~18 anos atrás)

Ae galera, blzinha?
Entao, estava precisando de um codigo como esse para disponibilizar alguns arquivos para um amigo! Fiz algumas alterações para minhas necessidades... ai vai...

<?
// variável que define o diretório das imagens
// ./ é o diretório onde está a página
$dir = "./";

// esse seria o "handler" do diretório
$dh = opendir($dir);

// loop que busca todos os arquivos até que não encontre mais nada
while (false !== ($filename = readdir($dh)))
{
if (substr($filename,-4) == "")
{
$filename="";
}
if (substr($filename,-4) == ".")
{
$filename="";
}
if (substr($filename,-4) == "..")
{
$filename="";
}

$str = $filename;
$a = str_word_count($str, 1);
//$b = str_word_count($str, 2);
$c = str_word_count($str);

// imprime na tela as variaveis acima( $a, $b e $c)
//print_r($a);
// //print_r($b);
//print $c;

// pega a ultima parte do array
// utilizo para pegar a extensão dos arquivos
$ultimo = $c - 1;
$tipo = $a[$ultimo];
//echo $tipo;

echo "
<table>
<tr>
<td>
$filename
</td>
<td>
<a href=\"$filename\">";
if (substr($filename,-4) == ".") { $download=""; }
else if (substr($filename,-4) == "..") { $download=""; }
else if (substr($filename,-4) == "") { $download=""; }
// utilizo para diferenciar os arquivos que tenho no servidor das pastas
else if (($tipo == "php") || ($tipo == "htm") || ($tipo == "gif") || ($tipo == "jpg") || ($tipo == "rar"))
{ $download="Download";}
else { $download="Abrir diretorio";}
echo "$download";
echo "</a>
</td>
</tr>
</table>
";
}
?>

abraços
23/01/2006 8:37am (~18 anos atrás)

vamos supor q eu queira através da variável $exibir = _GET["exibir"]

escolher quantas fotos eu quero mostrar do diretório...

exemplo:
www.wjdkfns.com/mostrafotos.php?dir=fotos/&exibir=1

alguém pode me ajudar com isso?
13/07/2005 2:24pm (~19 anos atrás)

Amigo adorei o modelo do seu album, porem não estou consiguindo um detalhe, mostrar as imagens peguenas... tipo o link ele faz correto, o link da imagem pequena também... mais não mostra a imagem pequena só aquele X vermelho no lugar.

Obs. Já habilitei GD.

Muito obrigado pela atenção, gustavo
endereço www.agrineg.com/facu/fotoss/
06/12/2004 6:43am (~19 anos atrás)

tenho um diretorio e subdiretorios de fotos como fazer para listar os mesmos.
22/10/2004 9:27am (~19 anos atrás)

Fala galera..estou precisando fazer um sistema de album de fotos e precisaria saber como faço pra colocar os resultados com registro em banco de dados para que depois sejam exibidas em albuns separadospor festas através de um ID para a festa

Espero que aqui alguém me ajuda
vlw
13/07/2004 7:11am (~20 anos atrás)

rui paiva disse:
como faço para ele mostrar as fotos em ves de o nome delas?
24/04/2004 8:22am (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)