2011-05-26 20 views

Respuesta

8

No lo creo. La manera más rápida/más rápida que puedo pensar es la siguiente, que debería funcionar tanto como yo pueda ver.

function dir_is_empty($path) 
{ 
    $empty = true; 
    $dir = opendir($path); 
    while($file = readdir($dir)) 
    { 
     if($file != '.' && $file != '..') 
     { 
      $empty = false; 
      break; 
     } 
    } 
    closedir($dir); 
    return $empty; 
} 

Esto sólo debe pasar por un máximo de 3 archivos. Los dos . y .. y potencialmente lo que viene después. Si algo viene después, no está vacío, y si no, está vacío.

+0

@Jon, ¿Por qué? No diciendo que no es así; puede ser; solo curiosidad por saber por qué. – Svish

-1

No realmente, pero puede intentar eliminarlo. Si falla, no es vacía (o simplemente no se puede eliminar;))

function dirIsEmpty ($dir) { 
    return rmdir($dir) && mkdir($dir); 
} 

Actualización:

Parece que la respuesta, que se lleva a la condición de "sin analizar" en cuenta, no encontrar mucho amigos;)

function dirIsEmpty ($dir) { 
    return count(glob("$dir/**/*")) === 0: 
} 

Tenga en cuenta, que esto supone, que el directorio y todos los subdirectorios no contiene ningún archivo oculto (comenzando con un solo .).

+1

Intentar borrar algo para saber si está vacío parece sucio ... Aunque me puedo equivocar. (Y los permisos importan tal como lo dices) –

+0

@Oktopus: No es la solución más limpia, pero en mi opinión es la única, que no requiere iterar sobre el contenido de los directorios (que por lo que entiendo no quería por el op). Mi "respuesta principal" a la pregunta "¿Hay una solución mejor" es "No realmente";) – KingCrunch

+0

Suponiendo que el directorio no contiene ningún archivo oculto ... ¿no es un poco arriesgado? Si contiene archivos ocultos, no está realmente vacío, ¿o sí? – Svish

Cuestiones relacionadas