27.5.08

Eliminar directorios (y sus contenidos) en PHP

La funcion rmdir() de PHP solo elimina directorios que se encuentren vacios, lo cual hace un poco denso eliminar estructuras de directorios grandes y complejas. En el manual de PHP hay un comentario que contiene una funcion para eliminar directorios y sus contenidos de forma recursiva:

function rm_recursive($filepath) {
if (is_dir($filepath) && !is_link($filepath)) {
if ($dh = opendir($filepath)) {
while (($sf = readdir($dh)) !== false) {
if ($sf == '.' || $sf == '..') {
continue;
}
if (!rm_recursive($filepath.'/'.$sf)) {
throw new Exception($filepath.'/'.$sf.' could not be deleted.');
}
}
closedir($dh);
}
return rmdir($filepath);
}
return unlink($filepath);
}

La entrada de rmdir() en el manual de PHP tiene otras recetas similares a la que use anteriormente. Otros ejemplos usan glob() pero, al parecer, tarda mucho en soltar los archivos y esto puede generar problemas aleatorios con los permisos de los archivos. El comentario correspondiente a la funcion tambien expone que utilizar opendir() es mas rapido que glob().

No hay comentarios.: