2011-05-26 19 views

cevap

8

Böyle düşünmeyin. Düşünebildiğim kadarıyla çalışmam gereken en kısa/en hızlı yol aşağıdakiler.

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

Bu, yalnızca en çok 3 dosyadan geçirilmelidir. İki . ve .. ve potansiyel olarak ne olursa olsun gelir. Bir şey daha sonra gelirse, boş değildir ve değilse de boştur.

+0

@Jon, Neden? Söylememek; olabilir; sadece nedenini merak ediyorum. – Svish

-1

Gerçekten değil, ancak silmeyi deneyebilirsiniz. Başarısız olursa, (ya da sadece silemezsiniz;) onun boş değil)

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

Güncelleme:

görünüyor dikkate "ayrıştırma olmadan" koşulunu alır cevap, yani çok arkadaş bulamazsa, bu varsayar,)

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

not, dizin ve her alt dizin) tek . ile başlayan (herhangi bir gizli dosyayı içermediğini.

+1

Boş olup olmadığını bilmek için bir şeyler silmeye çalışıyorum kirli hissediyorum .... Yine de yanlış olabilir. (Ve izinler sizin belirttiğiniz gibi önemlidir) –

+0

@Oktopus: Onun en temiz çözümü değil, ama bence tek bir şey var, bu dizin içeriğinde yinelemeyi gerektirmiyor (istediğim kadarıyla değil. op). Benim "ana cevap" sorusuna "daha iyi bir çözüm var mı" "Gerçekten değil";) – KingCrunch

+0

Dizinin herhangi bir gizli dosya içermediğini varsayarak ... bu biraz riskli değil mi? Gizli dosyalar içeriyorsa, gerçekten boş değil, değil mi? – Svish

İlgili konular