Gestão de directórios com PHP

Aprendemos a navegar a través dos paths dos directórios do sistema de ficheiros do servidor.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 21/9/04
Valorize este artigo:
Continuando com a saga de artigos referentes a utilização de ficheiros através de PHP, vamos apresentar algumas funções que nos podem ser muito úteis na navegação de directórios. Este tipo de funções poderiam, por exemplo, servir-nos para criar exploradores de ficheiros no nosso navegador.

Funções de gestão de directórios

FunçãoDescriçãoSintaxe
opendirAbre um directorio situado em $path e atribui-lhe um identificador $dir$dir = opendir($path)
readdirLê um elemento do directório $dir aberto previamente com opendir e move o ponteiro ao elemento seguinte.readdir($dir)
rmdirElimina o directório $dirrmdir($dir)
mkdirCria um directório situado em $path com os direitos de acesso $direitos (inteiro)mkdir($path, $direitos)
rewinddirPoe o ponteiro de leitura do directório $dir no primeiro elemento.rewinddir($dir)
closedirFecha o directório $dir aberto previamente com opendirclosedir($dir)

A forma de tratar com estas funções é similar a que já vimos para a leitura sequencial de ficheiros. Podemos falar de três etapas básicas:

  • Apertura do directorio através da função opendir atribuindo-lhe ao mesmo tempo um identificador
  • Realização das tarefas necessárias em relação com esse directório.
  • Clausura do identificador através da função closedir.
Repara que, para que um directório possa ser apagado, é necessário eliminar previamente cada um dos elementos que contem o directório. Para isso, podemos utilizar a função unlink, apresentada noutro artigo.

Por outro lado, a criação de um directório a través da função mkdir requer a definição dos direitos de acesso através de um número inteiro. Esperamos poder explicar melhor o funcionamento destes direitos em breve.

Como exemplo simples do que podemos fazer com estas funções, aqui vos apresentamos um pequeno script de leitura que vos permite visualizar o conteúdo de um directório:

<?
//definimos o path de acesso
$path = "meu/caminho";
//abrimos o directório
$dir = opendir($path);
//Mostramos as informações
while ($elemento = readdir($dir))
{
   echo $elemento."<br>";
}
//Fechamos o directório
closedir($dir);
?>


Outra maneira de abordar a gestão de directórios é através da classe dir que permite a criação de um objecto sobre o qual podemos aplicar uma serie de métodos equivalentes às funções previamente vistas. Se estás familiarizado com a programação orientada a objectos, é possível que esta modalidade se torne mais fácil.

Neste caso, a forma de operar é análoga:

  • Criamos um objecto $dir com o comando: $dir=$dir($path)
  • Realizamos as tarefas necessárias chamando aos métodos da classe dir
  • Fechamos o directório com o método close
Alguns dos métodos que podemos utilizar com esta classe são os seguintes:

Métodos da classe dir

MétodoDescripciónSintaxis
pathIndica o path do directório$objeto->path
readLê um elemento do directório$objeto->read
rewindPoe o ponteiro de leitura do directório $dir no primeiro elemento.$objeto->rewind
closeFecha o directório$objeto->close

Como exemplo, temos aqui o script equivalente ao utilizado para o caso das funções, esta vez usando a classe dir:

<?
//definimos o path de acesso
$path="meu/caminho/";
//criamos o objeto
$dir=dir($path);
//Mostramos as informações
echo "Directorio ".$dir->path.":<br><br>";
while ($elemento = $dir->read())
{
   echo $elemento."<br>";
}
//Fechamos o directório
$dir->close();
?>


Os scripts aqui mencionados não mais do que exemplos simples do que estas funções nos podem oferecer. Fica nas vossas mãos o combinar estas funções com outras de modo a criar aplicações que giram os ficheiros e directórios do vosso servidor.

Relembramos que esta lista só é uma compilação e que existem muitas outras funções relacionadas que podem ser-nos muito úteis.





Comentários do artigo
Foram enviados 3 comentários ao artigo
1 comentário não revisado
2 comentários revisados:
como retiro
Por: bruoff
24/5/10
como retiro da listagem da pasta o '.' e '..' que seriam referente as subpastas ?
Usando iterators
Por: rogerio-y
23/7/10
Você pode fazer isso de maneira mais simples com iterators...

Um exemplo: http://phpdive.com/como-listar-arquivos-de-diretorio-recursivamente-com-php.html

$diretorio = 'downloads';

$iterator = new RecursiveDirectoryIterator($diretorio);
$recursiveIterator = new RecursiveIteratorIterator($iterator);

foreach ( $recursiveIterator as $arquivo ) {
printf(
'<a href="%1$s" title="%2$s">%2$s</a><br />',
$arquivo->getPathname(),
$arquivo->getFilename()
);
}

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato