문제

누구든지 삭제 한 경험이 있습니까? __MACOSX PHP가있는 폴더?

아카이브를 풀고 나서 폴더가 생성되었지만 삭제할 수는 없습니다.

그만큼 is_dir 함수는 파일에서 false를 반환하므로 재귀 삭제 스크립트가 실패하게됩니다 (아카이브 내부는 'Temp'파일이기 때문에) 디렉토리가 비어 있지 않습니다.

PHP5에서 내장 된 ZipACHIVE 클래스 (Extractto Method)를 사용하고 있습니다.

내가 사용하고있는 rmdir 스크립트는 php.net에서 찾은 스크립트입니다.

<?php
// ensure $dir ends with a slash
function delTree($dir) {
    $files = glob( $dir . '*', GLOB_MARK );
    foreach( $files as $file ){
        if( substr( $file, -1 ) == '/' )
            delTree( $file );
        else
            unlink( $file );
    }
    rmdir( $dir );
}
?> 
도움이 되었습니까?

해결책

기능의 개선 된 버전을 찾았습니다 http://www.php.net/rmdir PHP5가 필요합니다.

  • 이 기능은 사용합니다 DIRECTORY_SEPARATOR 대신에 /. PHP는 정의합니다 DIRECTORY_SEPARATOR 실행중인 OS ( '/'또는 '')의 적절한 문자로.
  • 디렉토리 위치는 슬래시로 끝날 필요가 없습니다.
  • 함수가 반환됩니다 true 또는 false 완료시.
function deleteDirectory($dir) {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir)) return unlink($dir);
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') continue;
        if (!deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) return false;
    }
    return rmdir($dir);
}

다른 팁

어떤 OS와 버전을 사용하고 있습니까?


디렉토리 및 파일의 경로를 수정해야합니다.

// ensure $dir ends with a slash
function delTree($dir) {

    foreach( $files as $file ){
        if( substr( $file, -1 ) == '/' )
            delTree( $dir.$file );
        else
            unlink( $dir.$file );
    }
    rmdir( $dir );
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top