• Artigos
  • Projetos
  • Lista
  • Docs
  • Enviar Artigo
  • ?

Percorrendo diretórios com SPL

17/01/2009  Pablo DallOglio 

A forma mais comum de se ler o conteúdo de um diretório em PHP é utilizando um laço de repetição WHILE em conjunto com as funções opendir() e readdir(), como no exemplo a seguir...

<?php
$dir 
= opendir('/tmp');
while (
$arquivo = readdir($dir))
{
    echo 
"$arquivo<br>\n";
}
closedir($dir);
?>



O uso da função readdir() é simples, permite iterar por todos os arquivos de um diretório. Quando a leitura do diretório acabar, a função retorna FALSE, caindo fora do loop. Porém, se existir algum arquivo com o nome "0", a função retornará vazio, e a comparação também abortará o loop. A solução é simples, basta uma comparação absoluta com o valor FALSE:
<?php
while (($arquivo = readdir($dir)) !== FALSE)
?>


Apesar de simples, estes testes são suscetíveis ao esquecimento do programador. Felizmente o PHP5 introduz iterators, que são uma forma bem mais elegante de se percorrer cadeias de informações. Existem iterators para bancos de dados, XML e sistema de arquivos, é claro. O exemplo anterior, reescrito utilizando iterators, ficaria assim:

<?php
foreach (new DirectoryIterator('/tmp') as $arquivo)
{
    echo 
"$arquivo<br>\n";
}
?>



O Iterator DirectoryIterator existe para se percorrer o sistema de arquivos e ele tem vários recursos adicionais, como filtros (FilterIterator), que permite exibir somente os resultados que satisfaçam o filtro.

O iterator é implementado sob a forma de uma classe que segue uma interface rígida. Podemos criar iterators para várias tarefas. Os iterators são parte do PHP5 e são providos pela extensão SPL (Standard PHP Library).

Comentários

Adicionar Comentário
 login  
 Senha  
 Título  
 Comentário  
  Efetuar Cadastro
  Esqueci a Senha

Livros




    Outros

    Busque conteúdo no site
    Participe de nosso grupo no google

    [Página do grupo]  [Arquivo do grupo]

    Google

    Parceiros

 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

© 2006 Wordpress Themes | Theme (Not so) Fresh
XHTML CSS RSS allposts