Função para apagar um diretório e todo o seu conteúdo
Se você já tentou apagar uma pasta pelo PHP, viu como é um processo chato caso ela esteja cheia de arquivos e subpastas com mais arquivos dentro. É que o PHP só apaga um diretório se ele estiver completamente vazio. Então criei esta função em que você só informa uma pasta "raiz", e ela automaticamente exterminará todo o conteúdo que houver no diretório antes de apagá-lo... Vou postar duas funções que fazem isso (uma normal e a outra recursiva... tem pra todos os gostos :D o resutado final é o mesmo). :rolleyes:
Abraços!
Atenção!
Arquivos apagados pelo PHP não podem ser recuperados. Portanto, tenha muito cuidado ao utilizar esta função. Saiba bem o que está fazendo antes de colocar este script para executar. Não me responsabilizo por qualquer arquivo (inclusive as fotos do topless da Angélica) que você possa perder pelo mau uso desta função.
<?php
//Forma de utilizar a função
$dir = 'diretorio/que/sera/removido/';
removeTree($dir); // ou removeTreeRec($dir), dependendo da função que você copiar
?>
function removeTree($rootDir)
/**
* Função para remover um diretório sem ter que apagar manualmente cada arquivo e pasta dentro dele
*
* ATENÇÃO!
*
* Muito cuidado ao utilizar esta função! Ela apagará todo o conteúdo dentro do diretório
* especificado sem pedir qualquer confirmação. Os arquivos não poderão ser recuperados.
* Portanto, só utilize-a se tiver certeza de que deseja apagar o diretório.
*
*
* Autor: Carlos Reche
* E-mail: [email protected]
*
* Por favor, mantenha os créditos : )
*
*/
{
if (!is_dir($rootDir))
{
return false;
}
if (!preg_match("/\\/$/", $rootDir))
{
$rootDir .= '/';
}
$stack = array($rootDir);
while (count($stack) > 0)
{
$hasDir = false;
$dir = end($stack);
$dh = opendir($dir);
while (($file = readdir($dh)) !== false)
{
if ($file == '.' || $file == '..')
{
continue;
}
if (is_dir($dir . $file))
{
$hasDir = true;
array_push($stack, $dir . $file . '/');
}
else if (is_file($dir . $file))
{
unlink($dir . $file);
}
}
closedir($dh);
if ($hasDir == false)
{
array_pop($stack);
rmdir($dir);
}
}
return true;
}
function removeTreeRec($rootDir)
/**
* Função recursiva para remover um diretório sem ter que apagar manualmente cada arquivo e pasta dentro dele
*
* ATENÇÃO!
*
* Muito cuidado ao utilizar esta função! Ela apagará todo o conteúdo dentro do diretório
* especificado sem pedir qualquer confirmação. Os arquivos não poderão ser recuperados.
* Portanto, só utilize-a se tiver certeza de que deseja apagar o diretório.
*
*
* Autor: Carlos Reche
* E-mail: [email protected]
*
* Por favor, mantenha os créditos : )
*
*/
{
if (!is_dir($rootDir))
{
return false;
}
if (!preg_match("/\\/$/", $rootDir))
{
$rootDir .= '/';
}
$dh = opendir($rootDir);
while (($file = readdir($dh)) !== false)
{
if ($file == '.' || $file == '..')
{
continue;
}
if (is_dir($rootDir . $file))
{
removeTreeRec($rootDir . $file);
}
else if (is_file($rootDir . $file))
{
unlink($rootDir . $file);
}
}
closedir($dh);
rmdir($rootDir);
return true;
}
Question
Beraldo
Script postado por: Illidan
Função para apagar um diretório e todo o seu conteúdo
Se você já tentou apagar uma pasta pelo PHP, viu como é um processo chato caso ela esteja cheia de arquivos e subpastas com mais arquivos dentro. É que o PHP só apaga um diretório se ele estiver completamente vazio. Então criei esta função em que você só informa uma pasta "raiz", e ela automaticamente exterminará todo o conteúdo que houver no diretório antes de apagá-lo... Vou postar duas funções que fazem isso (uma normal e a outra recursiva... tem pra todos os gostos :D o resutado final é o mesmo). :rolleyes:
Abraços!
Atenção!
Arquivos apagados pelo PHP não podem ser recuperados. Portanto, tenha muito cuidado ao utilizar esta função. Saiba bem o que está fazendo antes de colocar este script para executar. Não me responsabilizo por qualquer arquivo (inclusive as fotos do topless da Angélica) que você possa perder pelo mau uso desta função.
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.