Percorrendo diretórios com PHP usando a SPL
Bom revê-los caros leitores!
Hoje irei abordar um assunto bem batido, mas por uma óptica nova: a listagem de arquivos de um diretório através do PHP. Geralmente este recurso não é muito utilizado, mas para quem desenvolve o já desenvolveu sistemas mais robustos em PHP, já deve ter se deparado com essa necessidade, que antes era um pouco mais trabalhosa (que espaguetosa) pois tínhamos que utilizar de funções como readdir() e open_dir().
Felizmente, com a versão 5 do PHP veio a SPL (Standart PHP Library), que nada mais é que uma coleção de classes e interfaces que já abstrarem muita coisa que antes era braçal, e que agora fazem o “trabalho sujo”. Não é uma framework, e esá muito longe de ser rica como, por exemplo, o Java, mas já substitui grande parte das funções de array e no nosso caso o trabalho com diretórios.
Para exemplificar imagine que você precisa listar todos os arquivos de um diretório, e que ainda, dentro deste mesmo diretório existam subdiretórios e com arquivos dentro, e você deseja listar todos eles. Pois bem, você precisa fazer isso recursivamente, veja como fazer isso com a SPL:
$path = '/httpdocs/application/classes/'; $recursiveIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); foreach($recursiveIterator as $arquivo) { echo $arquivo->getFilename(); // Aqui exibe o nome do arquivo corrente dentro do loop foreach /** * Existem muito mais métodos que você pode chamar aqui dentro. * por exemplo: getExtension(), getSize(), isExecutable(), */ }
Simples não? Não? Calma eu explico: Na linha a variável $path está definindo qual será o diretório que será lido, em seguida na linha 3 temos a declaração da classe RecursiveInteratorInterator, que recebe em seu construtor um objeto da classe RecursiveDirectoryIterator. Isso significa que estamos abrindo interações dentro dos diretórios, ou seja a cada passagem do loop foreach abaixo ele irá explorar um item do diretório, seja um arquivo ou um subdiretório.
Vale a pena a lida na documentação da classe para que você veja todos os métodos e propriedades disponíveis.
Referências:
- Manual PHP – Standart PHP Library – Classes
- Manual PHP – Standart PHP Library – Visão Geral
- Revista PHP – Standart PHP Library
- garotosopa – 7 coisas simples que alguns ainda complicam
- Codare – Percorrendo diretórios com SPL
Abraços,