Warning: rmdir(..): Directory not empty

Dezembro 2016


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 :
Este documento, intitulado « Warning: rmdir(..): Directory not empty »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.