PHP: Listando arquivos e pastas de um diretório

Standard

Quando o assunto é manipulação de arquivos dentro de um servidor, muita coisa pode ser feita. Inclusive para os administradores, alguns scripts são realmente úteis, como o que vamos ver a seguir.

O script que vou apresentar, é uma forma prática de listar as pastas e arquivos de um diretório (diretório este, que deverá ser remoto, ou seja, online), mostrando visualmente o que é pasta, e o que é arquivo.
Facilidade esta, que pode ser adicionada à um script de download, envio por email, etc.

Vou trabalhar aqui, com algumas funções pouco utilizadas, ou melhor dizendo, pouco exploradas.
São elas:
getcwd: http://www.php.net/manual/pt_BR/function.getcwd.php
opendir: http://www.php.net/manual/pt_BR/function.opendir.php
readdir: http://www.php.net/manual/pt_BR/function.readdir.php
sort: http://www.php.net/manual/pt_BR/function.sort.php
is_dir: http://www.php.net/manual/pt_BR/function.is-dir.php

getcwd: obtém o diretório atual
opendir: abre o diretório informado no getcwd
readdir: lê o diretório abe rto

Então esta é a primeira parte:

<?php
// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro  = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
    $itens[] = $nome_itens;
}

O que fizemos aqui, foi justamente, pegar o diretório, abri-lo e lê-lo.

Continuando, vamos usar:

sort: ordena os vetores (arrays), de acordo com os parâmetros informados. Aqui estou ordenando por pastas e depois arquivos

// 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;
		}
   }
}

Vimos acima, a expressão is_dir, indicando que as ações devem esntão ser executadas, ali mesmo, no diretório que já foi aberto e lido. As ações que executamos ali, foram: ver se tem pastas, listar. Ver se tem arquivos, listar.

Agora, se houverem pastas, serão apresentadas antes dos arquivos, em odem alfabética.
Se não houverem, serão apresentados apenas os arquivos, na mesma ordem.
E se houverem os dois, serão mostrados igualmente.

// lista as pastas se houverem
if ($pastas != "" ) {
foreach($pastas as $listar){
   print "Pasta: <a href='$listar'>$listar</a><br>";}
   }
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
   print " Arquivo: <a href='$listar'>$listar</a><br>";}
   }
?>

Para ver este script funcionando, clique aqui: http://www.flaviajobs.com.br/sistemas/revistaphp/listadir.php

O que você pode fazer, para melhorar um código como este: adicionar links às pastas e arquivos, podendo então fazer download, ou enviar um deles por email, por exemplo.
Também poderá adicionar um contador, para saber quantos arquivos tem, quantas pastas também.
Ou ainda: calcular o espaço que os arquivos estão tomando neste diretório, utilizando conjugadamente as funções filesize (ler tamanho do artigo) e disk_total_space (ver tamanho total do diretório) – Ambas funções, abordarei em outro artigo.

Fonte: http://www.revistaphp.com.br/artigo.php?id=48

One thought on “PHP: Listando arquivos e pastas de um diretório

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.