PHP: Listando diretórios, subdiretórios, arquivos etc

Atualizado em 08/02/2017.


A partir da versão 5 do PHP pode-se utilizar um construtor muito útil para listar diretórios, subdiretórios, arquivos etc.

Este construtor chama-se “DirectoryIterator“.

/xampp
  / htdocs
    / sistema
      / fotos (diretório principal)
         / foto1.jpg
         / foto2.jpg
         / produtos (subdiretório)
              / produto1.jpg
              / produto2.jpg
         / albuns (subdiretório)
              / album1.jpg
              / album2.jpg

Veja como utilizá-lo:

<?php
// linux
$dir = new DirectoryIterator( '/www/sistema/fotos/' );
// windows
//$dir = new DirectoryIterator( 'c:/xampp/htdocs/sistema/fotos/' );
 
// array contendo os diretórios permitidos    
$diretoriosPermitidos = array("albuns");
 
foreach($dir as $file)
{
    // verifica se $file é diferente de '.' ou '..'
    if (!$file->isDot())
    {
        // listando somente os diretórios
        if  ( $file->isDir() )
        {
            // atribui o nome do diretório a variável
            $dirName = $file->getFilename();
 
            // listando somente o diretório permitido
            if( in_array($dirName, $diretoriosPermitidos)) {
                // subdiretórios
                $caminho = $file->getPathname();
                // chamada da função de recursividade
                recursivo($caminho, $dirName);
            }
        }
 
        // listando somente os arquivos do diretório
        if  ( $file->isFile() )
        {
            // atribui o nome do arquivo a variável
            $fileName = $file->getFilename();
            //
            echo "fotos: ".$fileName."<br>";
        }
    }
}
 
function recursivo( $caminho, $dirName ){
 
    global $dirName;
 
    $DI = new DirectoryIterator( $caminho );
 
    foreach ($DI as $file){
        if (!$file->isDot())
        {
            if  ( $file->isFile() )
            {
                //
                $fileName = $file->getFilename();
                //
                echo $dirName.": ".$fileName."<br>";
            }
        }
 
    }
}
?>

Detalhes:
DirectoryIterator::__construct — Constrói um novo iterador de diretório a partir de um caminho
DirectoryIterator::current — Retorna $this (necessário para a interface Iterator)
DirectoryIterator::getATime — Retorna a data de último acesso do arquivo
DirectoryIterator::getCTime — Retorna a data de modificação do inode do arquivo
DirectoryIterator::getFilename — Retorna o nome do arquivo do elemento atual do diretório
DirectoryIterator::getGroup — Retorna o grupo do arquivo
DirectoryIterator::getInode — Retorna o inode do arquivo
DirectoryIterator::getMTime — Retorna a data da última modificação do arquivo
DirectoryIterator::getOwner — Retorna o proprietário do arquivo
DirectoryIterator::getPath — Retorna o caminho do diretório
DirectoryIterator::getPathname — Retorna o caminho e o nome do arquivo atual do diretório
DirectoryIterator::getPerms — Retorna as permissões do arquivo
DirectoryIterator::getSize — Retorna o tamanho do arquivo
DirectoryIterator::getType — Retorna o tipo do arquivo
DirectoryIterator::isDir — Retorna true se o elemento atual é um diretório
DirectoryIterator::isDot — Retorna true se o elemento atual for ‘.’ ou ‘..’
DirectoryIterator::isExecutable — Retorna true se o arquivo for executável
DirectoryIterator::isFile — Retorna true se o elemento atual for um arquivo
DirectoryIterator::isLink — Retorna true se o elemento atual for um link simbólico
DirectoryIterator::isReadable — Retorna true se o arquivo pode ser lido
DirectoryIterator::isWritable — Retorna true se o arquivo pode ser modificado
DirectoryIterator::key — Retorna o elemento atual do diretório
DirectoryIterator::next — Avança para o próximo elemento
DirectoryIterator::rewind — Recomeça a iteração do diretório
DirectoryIterator::valid — Verifica se o diretório possui ou não mais elementos

3 comentários em “PHP: Listando diretórios, subdiretórios, arquivos etc

  • 7 de fevereiro de 2017 em 22:15
    Permalink

    Muito bom o tutorial, vlw mesmo.

    Só uma duvida como eu poderia colocar um filtro pra só aparecer os diretórios que eu quiser?

    Resposta
    • 8 de fevereiro de 2017 em 9:38
      Permalink

      Fala Vicente.

      O script foi atualizado mostrando como filtrar os diretórios.

      Abraço

      Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *