• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

KiNgPiTo

Eliminar tudo excepto.....

5 mensagens neste tópico

Boas pessoal  :)

Alguem me dá uma ajuda nisto? Preciso de criar um ciclo que elimine todos os ficheiros que estejam numa pasta excepto aqueles cujo nome estão num array... não estou mesmo a ver como fazer isto...  :hmm:

Cumprimentos e muito obrigado  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

//crias o array com os ficheiros
$nao_apagar = array('image.jpg', 'documento.pdf');
//primeiro abres a pasta
if ($handle = opendir('/path/to/files')) {
    //Depois, lês cada ficheiro até acabarem
    while (false !== ($file = readdir($handle))) {
        //agora, confirmas que é um ficheiro (e não uma pasta) e que o nome do ficheiro não está no array
        if( is_file($file) && !in_array($file, $nao_apagar) ) {
            unlink($file);
        }
    }
    //finalmente, fechas a pasta
    closedir($handle);
}

opendir()

readdir()

is_file()

in_array()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado!! Ajudaste imenso...

Uma pequena correcção... o método readdir retorna apenas o nome do ficheiro e não o caminho para o ficheiro, por isso nos métodos is_file e unlink que precisam do caminho para o ficheiro e assim só têm o nome (pelo menos sem adicionar isso a mim não me deu...). Foi assim que deixei e a funcionar:

//crias o array com os ficheiros
$nao_apagar = array('doc1.pdf', 'doc2.pdf');
//primeiro abres a pasta
if ($handle = opendir('docs/pdfs')) {
    //Depois, lês cada ficheiro até acabarem
    while (false !== ($file = readdir($handle))) {
        //agora, confirmas que é um ficheiro (e não uma pasta) e que o nome do ficheiro não está no array
        if( is_file('docs/pdfs'.$file) && !in_array($file, $nao_apagar) ) {
            unlink('docs/pdfs'.$file);
        }
    }
    //finalmente, fechas a pasta
    closedir($handle);
}

Mais uma vez Muito Obrigado ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, sim, nem considerei isso. Também poderias usar

chdir('docs');

antes e

chdir('..');

depois do código, porque assim o PHP "entra" dentro da pasta antes de fazer as operações. Mas é opcional.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim... O que interessa é que ficou a dar e como é para usar numa função não interessa muito.. Muito obrigado pela ajuda ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora