Question

Has anyone had any experience with deleting the __MACOSX folder with PHP?

The folder was generated after I unzipped an archive, but I can't seem to do delete it.

The is_dir function returns false on the file, making the recursive delete scripts fail (because inside the archive is the 'temp' files) so the directory isn't empty.

I'm using the built-in ZipArchive class (extractTo method) in PHP5.

The rmdir script I'm using is one I found on 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 );
}
?> 
Was it helpful?

Solution

I found an improved version of the function from http://www.php.net/rmdir that requires PHP5.

  • This function uses DIRECTORY_SEPARATOR instead of /. PHP defines DIRECTORY_SEPARATOR as the proper character for the running OS ('/' or '\').
  • The Directory Location doesn't need to end with a slash.
  • The function returns true or false on completion.
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);
}

OTHER TIPS

Which OS and version are you using?


You need to correct the paths to the directory and files.

// 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 );
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top