W3docs

closedir()

A função closedir() do PHP libera os recursos do sistema alocados a um fluxo de diretório, prevenindo vazamentos de memória.

Introdução

A função closedir no PHP é uma função essencial que ajuda a liberar os recursos do sistema alocados ao fluxo de diretório. Essa função é indispensável para evitar vazamentos de memória e garantir que o seu código execute de forma eficiente. No entanto, é importante entender o uso correto dessa função para evitar comportamentos inesperados no seu código.

Entendendo a função closedir

A função closedir() fecha um identificador de diretório que foi aberto anteriormente por opendir(). Após fechar o identificador, não é mais possível ler entradas com readdir() até reabrir o diretório.

Sintaxe da função closedir() do PHP

closedir(resource $dir_handle): void
  • $dir_handle — o identificador de diretório retornado por opendir(). Este parâmetro é opcional: se omitido, o PHP fecha o último identificador de diretório aberto por opendir().

A função não retorna nenhum valor (void). Ela simplesmente libera o recurso do sistema subjacente, portanto não há nada a capturar em uma variável.

Fechando um identificador de diretório

Ao trabalhar com um grande número de arquivos, é essencial fechar o identificador de diretório para liberar os recursos do sistema. Se você não fechar o identificador de diretório, o código consumirá cada vez mais memória, o que pode levar ao esgotamento de recursos.

Para fechar um identificador de diretório, é preciso utilizar a função closedir. A função recebe um único parâmetro, que é um recurso representando o identificador de diretório que você deseja fechar.

O fluxo de trabalho típico é: abrir o diretório, ler suas entradas e, em seguida, fechar o identificador. Aqui está um exemplo completo e executável que lista o diretório atual e sempre fecha o identificador:

Exemplo da função closedir() em PHP

<?php

$dir_handle = opendir('.');

if ($dir_handle !== false) {
    while (($entry = readdir($dir_handle)) !== false) {
        echo $entry . "\n";
    }
    closedir($dir_handle);
}

Ao executar isso em um diretório que contém index.php e style.css, será impresso algo como:

.
..
index.php
style.css

Primeiro abrimos o diretório com opendir(), lemos cada entrada com readdir() em um loop e, por fim, liberamos o identificador com closedir().

Sempre fechando o identificador com try...finally

Se o código que processa as entradas puder lançar uma exceção, envolva-o em um bloco try...finally para que o identificador seja fechado mesmo quando algo der errado:

<?php

$dir_handle = opendir('/path/to/directory');

if ($dir_handle !== false) {
    try {
        // Do something with the directory handle that might throw
        while (($entry = readdir($dir_handle)) !== false) {
            // process $entry
        }
    } finally {
        closedir($dir_handle);
    }
}

O bloco finally é executado independentemente de o loop ter concluído normalmente ou de uma exceção ter sido lançada, garantindo que o recurso seja liberado.

Erros comuns com closedir

Um erro comum ao trabalhar com closedir é tentar fechar um identificador de diretório duas vezes. Após fechar um identificador, você não pode fechá-lo novamente. Tentar fazê-lo acionará um aviso.

Outro erro comum é não verificar se o identificador de diretório é válido antes de fechá-lo. opendir() retorna false em caso de falha, portanto, sempre confirme que o identificador não é false (como nos exemplos acima) antes de passá-lo para closedir(). Passar um identificador inválido aciona um TypeError ou aviso dependendo da versão do PHP.

Um terceiro problema é esquecer que fechar o identificador não exclui nem modifica o diretório — apenas libera o recurso usado para iterar sobre ele. Os arquivos em disco permanecem intactos.

Funções relacionadas

  • opendir() — abre um identificador de diretório para leitura.
  • readdir() — lê a próxima entrada de um identificador de diretório aberto.
  • rewinddir() — reinicia o identificador de volta ao início do diretório.
  • scandir() — retorna todas as entradas do diretório como um array em uma única chamada (sem necessidade de fechar o identificador manualmente).

Conclusão

A função closedir() é essencial para liberar os recursos do sistema alocados a um fluxo de diretório. Usá-la corretamente — verificando a validade do identificador e envolvendo as operações em um bloco try...finally — previne avisos e vazamentos de memória. Seguir essas diretrizes garante que o seu código PHP execute de forma eficiente e confiável.

Prática

Prática
O que a função PHP closedir() faz?
O que a função PHP closedir() faz?
Was this page helpful?