Warning: rmdir(..): Directory not empty

Janeiro 2017


Introdução


Ao tentar excluir uma pasta em PHP, você encontrar o seguinte erro:

Warning: rmdir(..): Directory not empty

Pois é ! Você não pode excluir um diretório com "rmdir" se ele não estiver vazio. Então, você deverá utilizar uma função composta por você mesmo. O ideal é usar uma função recursiva que entra no diretório, o esvazia e, depois, o apaga. O fato desta função ser recursiva fará com que ela se lembre, ela mesma, em cada subdiretório, e assim por diante.

Veja como é este tipo de função:

O código da função (compatível com a PHP 5 ou superior)


<? 

function rmdir_recursiva($dir)
{
//Lista o conteúdo do diretório em uma tabela
$dir_content = scandir($dir);
//Este é realmente um diretóírio?
if($dir_content !== FALSE){
//Para cada entrada do diretório
foreach ($dir_content as $entry)
{
//Atalhos simbólicos no Unix, passemos
if(!in_array($entry, array('.','..'))){
//Encontramos o caminho em relação ao início
$entry = $dir . '/' . $entry;
//Esta entrada não é uma pasta: vamos removê-la
if(!is_dir($entry)){
unlink($entry);
}
//Esta entrada é uma pasta, vamos recomeçar nesta pasta
else{
rmdir_recursive($entry);
}
}
}
}
//Removemos todas as entradas da pasta, agora podemos excluí-la
rmdir($dir);
}
?>
Exemplo para excluir o diretório "coisa"

@rmdir_recursiva('coisa');
?>

Aviso sobre a segurança


Um pequeno aviso: se esta função falhar como, por exemplo, quando você não tem permissão para excluir um arquivo, você verá uma mensagem de erro na página web que pode dar informações ao usuário sobre o conteúdo dos seus diretórios. Por isso, é melhor a chamada para esta função ser precedida por um sinal de arroba, para não exibir mensagens de erro.



Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 4 de maio de 2014 às 11:20 por pintuda.
Este documento, intitulado 'Warning: rmdir(..): Directory not empty', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.