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.
valew, estava procurando essa dica .