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:
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."
";
}
}
}
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."
";
}
}
}
}
?>
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