Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal
Hoje precisava apagar arquivos dentro de uma pasta e a pasta, só que a pasta estava cheia de arquivos. Então, por necessidade, escrevi esta função.
<?php
function limparDiretorios($caminhoParaDiretorio) {
// definindo um array para exibir os erros
$erros = array ();
// definindo o objeto que faz a iteração do diretório
$diretorio = new RecursiveDirectoryIterator ( $caminhoParaDiretorio );
// definindo o objeto que fará a iteração recursiva
$arquivos = new RecursiveIteratorIterator ( $diretorio, RecursiveIteratorIterator::CHILD_FIRST );
// iterando o objeto
foreach ( $arquivos as $arquivo ) {
// verificando permissão, ou seja, se o arquivo pode ser modificado
if ($arquivo->isWritable ()) {
// verificamos se a iteração atual é de um diretório
if ($arquivo->isDir ()) {
// se for, utilizamos rmdir para excluir
rmdir ( $arquivo->getPathname );
// senão, testamos se é um arquivo
} elseif ($arquivo->isFile ()) {
// para arquivos, utilizamos o unlink
unlink ( $arquivo->getPathname );
}
// caso o arquivo não possa ser modificado, gravamos na variável o nome do arquivo e a permissão do arquivo
} else {
$erros [] = 'O arquivo ' . $arquivo->getPathname . ' tem permissões ' . $arquivo->getPerms () . ' e não pode ser excluído.';
}
}
// caso existam erros, mostramos, ou exibimos mensagem de sucesso.
if (count ( $erros )) {
return implode ( '<br />', $erros );
} else {
return 'Arquivos excluídos com sucesso.';
}
}
echo limparDiretorios( 'caminho/para/o/diretorio' );
O grande detalhe, que me fez perder um tempão, foi aqui:
$arquivos = new RecursiveIteratorIterator ( $diretorio, RecursiveIteratorIterator::CHILD_FIRST );
Ao utilizar o segundo parâmetro com o CHILD_FIRST, o diretório só será iterado após todos os seus arquivos serem iterados e apagados.
Espero que ajude.
Carlos Eduardo
Carregando comentários...