PHP: أبسط طريقة لحذف مجلد (بما في ذلك محتوياتها)

StackOverflow https://stackoverflow.com/questions/1296681

  •  18-09-2019
  •  | 
  •  

سؤال

ال rmdir() فشل الوظيفة إذا كان المجلد يحتوي على أي ملفات. يمكنني حلقة من خلال جميع الملفات في الدليل مع شيء مثل هذا:

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);

هل هناك أي طريقة لحذفها مرة واحدة فقط؟

هل كانت مفيدة؟

المحلول

حسنا، هناك دائما

system('/bin/rm -rf ' . escapeshellarg($dir));

حيثما كان ذلك متاحا.

نصائح أخرى

rrmdir() - حذف الدلائل بشكل متكرر:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
function delete_files($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           delete_files($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
 }

حسب هذه مصدر؛

احفظ بعض الوقت، إذا كنت ترغب في تنظيف دليل أو حذفه وأنت على Windows.

استخدم هذا:

    chdir ($file_system_path);
    exec ("del *.* /s /q");

يمكنك استخدام بناء جملة DEL الأخرى، أو أي قذيفة أخرى Util. قد تضطر إلى السماح للخدمة بالتفاعل مع سطح المكتب، حيث أن هذا الإعداد الحالي الخاص بي وأنا لا أغيره لاختبار ذلك.

آخر يمكنك العثور على طريقة بديلة هنا.

جرب هذا :

Exec ('RM -RF'. $ user_dir)؛

حذف هذا المزدء الدليل وجميع الدلائل الفرعية والملفات:

function DelDir($target) {
    if(is_dir($target)) {
        $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

        foreach( $files as $file )
        {
            DelDir( $file );      
        }

        rmdir( $target );
    } elseif(is_file($target)) {
        unlink( $target );  
    }
}

وظيفة واحدة آمنة وجيدة تقع في PHP تعليقات من خلال LOPRENT تقوم بمنع حذف محتويات أدلة الروابط الرمزية الموجودة في الدليل الحالي

public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top