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
ótimo tutorial
Muito bom o tutorial, vlw mesmo.
Só uma duvida como eu poderia colocar um filtro pra só aparecer os diretórios que eu quiser?
Fala Vicente.
O script foi atualizado mostrando como filtrar os diretórios.
Abraço
Muito bom o tutorial, me ajudou bastante.
Uma dúvida como eu posso ver todos os arquivos independente do diretórios ou sub-diretorio?
Exemplo: Diretorio Raiz (arquivo) – Sub-diretorio (arquivo) .
Gostaria só de configurar o diretorio raiz, para que ele buscasse todos os arquivos , independente se tivesse 3 ou 4 nives de diretorios.
Fala Moises,
Fiz uma pequena modificação no código:
Boa tarde,
Excelente material, exatamente o que procurava.
Duas questões.
1 – Como listar apenas os arquivos de uma determinada extensão (ex.: .php)?
2 – Como carregar os itens listados em um ?