2011-10-07 15 views
5

मैंने फ़ोल्डर हटाने के लिए रिकर्सिव PHP फ़ंक्शन लिखा था। मुझे आश्चर्य है, मैं इस फ़ंक्शन को वेबहोस्टिंग में सभी फ़ाइलों और फ़ोल्डरों को हटाने के लिए कैसे संशोधित करूं, फाइलों और फ़ोल्डर नामों के अतिरिक्त सरणी को छोड़कर (उदा। Cgi-bin, .htaccess के लिए)?PHP रिकर्सिव फ़ंक्शन हटाएं

BTW

इस सुविधा का उपयोग करने के लिए पूरी तरह से दूर करने के लिए एक निर्देशिका इस

recursive_remove_directory('path/to/directory/to/delete'); 

तरह बुला इस सुविधा का उपयोग करने के लिए एक निर्देशिका इस तरह बुला खाली करने के लिए:

recursive_remove_directory('path/to/full_directory',TRUE); 

अब समारोह

है
+0

मौजूदा कार्यान्वयन के लिए http://trac.symfony-project.org/browser/branches/1.4/lib/util/sfToolkit.class.php#L54 देखें। –

उत्तर

4

कोशिश कुछ:

function removedir($dir) { 
    if (substr($dir, strlen($dir) - 1, 1) != '/') 
     $dir .= '/'; 
    if ($handle = opendir($dir)) { 
     while ($obj = readdir($handle)) { 
      if ($obj != '.' && $obj != '..') { 
       if (is_dir($dir . $obj)) { 
        if (!removedir($dir . $obj)) 
         return false; 
       } 
       else if (is_file($dir . $obj)) { 
        if (!unlink($dir . $obj)) 
         return false; 
       } 
      } 
     } 
     closedir($handle); 
     if ([email protected]($dir)) 
      return false; 
     return true; 
    } 
    return false; 
} 

$folder_to_delete = "folder"; // folder to be deleted 

echo removedir($folder_to_delete) ? 'done' : 'not done'; 

IIRC मैं php.net से मिला:

$it = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('%yourBaseDir%'), 
    RecursiveIteratorIterator::CHILD_FIRST 
); 

$excludeDirsNames = array(); 
$excludeFileNames = array('.htaccess'); 

foreach($it as $entry) { 
    if ($entry->isDir()) { 
    if (!in_array($entry->getBasename(), $excludeDirsNames)) { 
     try { 
     rmdir($entry->getPathname()); 
     } 
     catch (Exception $ex) { 
     // dir not empty 
     } 
    } 
    } 
    elseif (!in_array($entry->getFileName(), $excludeFileNames)) { 
    unlink($entry->getPathname()); 
    } 
} 
+0

पर अपना विचार लागू करें मेरी मूल निर्देशिका www फ़ोल्डर है और इस फ़ंक्शन वाली फ़ाइल www फ़ोल्डर के अंदर होगी। '% YourBaseDir%' क्या होगा? यह भी पूरे रिकर्सिव फ़ोल्डर हटाना होगा ?? और htaccess से निपटने के लिए कैसे? – heron

+0

मेरी मूल निर्देशिका www फ़ोल्डर है और इस फ़ंक्शन वाली फ़ाइल www फ़ोल्डर के अंदर होगी।% YourBaseDir% क्या होगा? मेरा मतलब है कि फ़ंक्शन को मौजूदा फ़ोल्डर में सभी फ़ाइलों और फ़ोल्डरों को हटाना होगा और सरणी को बाहर करना होगा, और खुद – heron

+0

त्रुटियां प्राप्त करना: 'निर्देशिका rmdir ($ entry-> getPathname()) पर खाली नहीं है;' – heron

0
  1. आप $exclusionsrecursive_remove_directory() के लिए एक अतिरिक्त सरणी पैरामीटर प्रदान कर सकता है, लेकिन आप इस पैरामीटर हर बार रिकर्सिवली पारित करने के लिए होगा।

  2. $exclusions वैश्विक बनाएं। इस तरह इसे रिकर्सन के हर स्तर पर पहुंचा जा सकता है। इस तरह

+0

कृपया दिए गए कोड – heron

0

मैं सभी फ़ाइलें और सबफ़ोल्डर के साथ फ़ोल्डर हटाने के लिए इस समारोह का उपयोग कर रहा

संबंधित मुद्दे