Dovresti anche discriminare i casi in cui $file sia uguale a . e ..
quelli lì ti fanno andare su e giù.
Io uso questa funzione per eliminare le cartelle, occhio che in caso ci sia qualcosa dentro la cartella che vuoi cancellare (file e/o sottocartelle), questo elimina tutto, quindi se tu vuoi cancellare solo cartelle vuote non va bene.

Codice PHP:
//presuppone che alla fine della directory passata non ci sia lo /
function delete_directory($dirname)
{
    
$dirname trim($dirname);
    
    if (
$dirname != '')
    {
        if (
is_dir($dirname))
        {
            
$dir_handle opendir($dirname);
        }
        else
        {
            return 
FALSE;
        }
                
        if ( ! 
$dir_handle )
        {
            return 
FALSE;
        }
        
        while(
$file readdir($dir_handle))
        {
            if (
$file != "." && $file != "..")
            {
                if (!
is_dir($dirname.'/'.$file))
                {
                    
//è un file, lo cancello
                    
if ( ! unlink($dirname.'/'.$file) )
                    {
                        return 
FALSE;
                    }
                }
                else
                {
                    
//è una sottocartella, ricorsione per eliminarla
                    
if ( ! delete_directory($dirname.'/'.$file) )
                    {
                        return 
FALSE;
                    }
                }
            }
        }
        
closedir($dir_handle);
        
        if(
rmdir($dirname))
        {
            return 
TRUE;
        }
        else
        {
            return 
FALSE;
        }
    }
    else
    {
        return 
FALSE;
    }