Pergunta

Alguém já teve alguma experiência em excluir o __MACOSX Pasta com PHP?

A pasta foi gerada depois que eu abri um arquivo, mas não consigo excluí -lo.

o is_dir A função retorna falsa no arquivo, fazendo com que os scripts de exclusão recursiva falhem (porque dentro do arquivo são os arquivos 'temp') para que o diretório não esteja vazio.

Estou usando a classe Ziparchive integrada (Método Extracto) no PHP5.

O script rmdir que estou usando é um que encontrei no 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 );
}
?> 
Foi útil?

Solução

Eu encontrei uma versão aprimorada da função de http://www.php.net/rmdir Isso requer Php5.

  • Esta função usa DIRECTORY_SEPARATOR ao invés de /. PHP define DIRECTORY_SEPARATOR como o caractere adequado para o sistema operacional em execução ('/' ou '').
  • A localização do diretório não precisa terminar com uma barra.
  • A função retorna true ou false na conclusão.
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);
}

Outras dicas

Qual sistema operacional e versão você está usando?


Você precisa corrigir os caminhos para o diretório e os arquivos.

// 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 );
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top