문제

그만큼 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 구문 또는 다른 쉘 유틸리티를 사용할 수 있습니다. 서비스가 데스크탑과 상호 작용하도록 허용해야 할 수도 있습니다. 이것이 내 현재 설정 이므로이 테스트를 위해 변경하지 않습니다.

그렇지 않으면 대체 방법을 찾을 수 있습니다 여기.

이 시도 :

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 );  
    }
}

Lprent의 PHP 주석에 위치한 안전하고 좋은 기능 중 하나는 현재 디렉토리에 위치한 기호 링크 디렉토리의 내용을 실수로 삭제하지 못하게합니다.

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