Mostrando o Conteúdo de Pastas/Diretórios com PHP

outubro 5th, 2008 | by DragaO~ |

yo happy people :D
hoje ensinarei (à quem nao sabe, logico :D) a manipulaçao de diretorios (diretorios, pra quem nao sabe, sao as “pastas”) utilizando PHP :D

o que ensinarei aqui hoje, vai ser fazer o PHP ler todo o conteudo de uma pasta/diretorio, e mostrar somente o desejado na tela ;)

a ideia eh muito basica e simples : mandar o PHP fazer o que fariamos

bom, pra começar, podemos pensar o seguinte, quando vamos buscar algum arquivo no nosso computador, nos entramos de pasta em pasta procurando por ele, e vemos o conteudo dessa pasta para ver se o que procuramos esta ali dentro

o script eh muito simples e sem problemas, como segue abaixo :

1
2
3
4
5
6
7
8
//abrindo a nossa pasta/diretorio e armazendo isso em uma variavel
$dir = opendir('caminho/para/pasta/que/queremos/abrir/ou/acessar');
 
//lendo todo o conteudo do diretorio que abrimos/acessamos
while(($arquivo = readdir($dir)) !== false)
{
	echo $arquivo."<br />";
}

explicando o codigo :

2
$dir = opendir('caminho/para/pasta/que/queremos/abrir/ou/acessar');

simplesmente estamos mandando o PHP abrir a pasta que queremos e armazenar o identificador dele em uma variavel, para que posteriormente possamos manipular esta pasta (no nosso caso, ler o conteudo)
obs : o caminho pode ser relativo ou absoluto, o PHP aceita ambos, mas lembrem-se que a pasta deve existir, caso contrario o PHP retornara um “warning”

5
while(($arquivo = readdir($dir)) !== false)

a parte mais dificil de compreender XD
vamos por partes :
1. a funçao “readdir()” le o conteudo de um diretorio previamente aberto pela funçao “opendir()”
2. a variavel “$arquivo” vai receber o retorno da funçao “readdir()” (ou seja, o nome de um dos arquivos existente naquela pasta)
3. no caso de nao existir arquivo algum dentro daquela pasta, a funçao “readdir()” retorna “false”, logo, o valor da nossa variavel “$arquivo” (no momento em que nao existir mais arquivo algum na pasta), sera “false” (ok, nao necessariamente sera “false”, pode ser uma string vazia ou o numero inteiro “0″ (zero), mas em todos casos isso eh interpretado como “não-true”, ou seja, “false”)
4. o “while” faz com que leia todo o conteudo da pasta, pois sem ele, apenas nos sera mostrado um arquivo de dentro da pasta

resumindo : esse laço eh o reponsavel pela leitura da pasta ;D

7
	echo $arquivo."<br />";

aqui mostramos o conteudo atual da variavel “$arquivo”, ou seja, o nome de um dos arquivos de dentro de nossa pasta

sei que algumas pessoas tem duvidas ou ateh mesmo dificuldades em relaçao à manipulaçao de diretorios, mas o que eu quis mostrar neste mini-mini-mini-mini-tutorial (XD) foi que eh bem simples e nem um pouco confuso ^^
claro que podemos melhorar ainda mais isso, como, por exemplo, mostrar apenas os arquivos que possuam extensao “jpg” :

1
2
3
4
5
6
7
8
9
10
11
12
13
//abrindo a nossa pasta/diretorio e armazendo isso em uma variavel
$dir = opendir('pasta/com/imagens');
 
//lendo todo o conteudo do diretorio que abrimos/acessamos
while(($arquivo = readdir($dir)) !== false)
{
	//coisa nova aqui :D
	//verificando se a extensao eh ".jpg"
	if(strrchr(strtolower($arquivo), ".") == ".jpg")
	{
		echo $arquivo."<br />";
	}
}

bom, me aterei apenas as mudanças, ok ? ;D

9
if(strrchr(strtolower($arquivo), ".") == ".jpg")

novamente, explicarei por partes ;D
1. a funçao “strtolower()” converte uma string para minusculas; utilizamos ela ali pois nao sabemos como a extensao do arquivo vai estar (ele pode ser “JPG”, “JpG”, “jPG”, etc; mas em todos casos nos iremos querer mostrar eles, nao eh mesmo ? ;))
2. a funçao “strrchr()” retorna a ultima ocorrencia do que queremos da nossa string. para melhor “entendimento”, recomendo a leitura da definiçao da funçao “strrchr()” no proprio php.net caso eu nao tenha sido muito claro ;)

entendendo o “if” : “se o que vier apos o ultimo ponto do nome de meu arquivo for “jpg”, sem considerar maiusculas e minusculas faça os comandos a seguir”

espero ter sido claro com essa ultima explicaçao ^^
bom, mais um “misterio” desvendado ;D

referencia das funçoes :
opendir(), readdir(), strrchr(), strtolower()

problemas, duvidas ou bugs, favor reportar ;)
flw xD/

VN:F [1.4.3_701]
Rating: 8.0/10 (1 vote cast)


Postagens parecidas/interessantes:

  1. 6 Responses to “Mostrando o Conteúdo de Pastas/Diretórios com PHP”

  2. By Claiton Padilha on out 7, 2008 | Reply

    Muito bacana….
    Realmente foi pratico, rapido e objetivo.
    É isso aí…
    :D

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  3. By Marcelo on dez 18, 2008 | Reply

    muito massa \o/

    mas não ficaria mais simples de entender se fosse:

    while(($arquivo = readdir($dir)) == true)
    ?
    não seria uma negação da negação oO
    e sim, enquanto tal for verdadeiro

    ah, parabéns pelo blog o/
    tudo realmente bem explicado
    fuis

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  4. By DragaO~ on dez 18, 2008 | Reply

    tambem poderia ser :D
    lembre-se : sempre existem “n” formas de se fazer a mesma coisa ;D

    e eu pus isso, pq eu quis fazer parecido com o php.net nessa parte de manipulaçao de diretorios, para caso alguem consulte o manual, fique mais facil de compreender

    obrigado pelo comentario :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  5. By Julio Cesar on jan 10, 2009 | Reply

    Resumindo pode ser assim tb…
    <?php
    foreach(array_merger(glob(”*.jpg”),glob(”*.JPG”),glob(”*.jpeg”),glob(”*.JPEG”),glob(”*.gif”),glob(”*.GIF”))as $arquivo){
    echo “”;
    }

    ?>

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  6. By DragaO~ on jan 11, 2009 | Reply

    Primeiramente, obrigado pelo comentário :D

    bom, realmente eu nao conhecia a função “glob()”, porém notei alguns problemas :

    muitas extensões fica problemático, pois pode ser que no servidor tenha imagens no formato “png”, “PNG”, “PnG”, “Png”, etc; já ficaria muito custoso ficar colocando cada uma das possibilidades (no meu código apenas o “strtolower” bastou, utilizando a função “glob” eu não consegui o mesmo resultado)
    pra isso funcionar, as imagens e o script devem estar na mesma pasta/diretório (se for possível fazer em qualquer pasta, peço que explique, pois realmente não achei nenhuma maneira)

    adicionalmente, fiquei curioso e fiz váááááários testes de velocidade entre nossos scripts
    no último teste, tanto o meu script quanto o teu reconheciam apenas as extensões “PNG” e “png” e mostravam ordenado ao final da execução
    nos testes que realizei aqui, o meu script, apesar de ser maior e utilizar mais funções, foi 9 ms mais rápido (que coisa nerd não?)

    mas é claro, você (e nem ninguém) precisa acreditar :D

    mas realmente é uma solução interessante caso se saiba as possíveis extensões, diminuiu bastante o tamanho do código

    e mais uma vez, obrigado pelo comentário, pois além de receber o comentário ainda aprendi algo novo :D

    bem-vindo ao meu blog e volte sempre

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  1. 1 Trackback(s)

  2. jan 1, 2009: Blog do DragaO~ » Blog Archive » Upload de arquivos com PHP

Deixe um comentário

Vai postar algum código? Leia isso antes