Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

[ GuTo ]

Excluir pastas e arquivos

Recommended Posts

Olá pessoal, beleza?

 

Quero criar uma página que se eu chamar ela, ela apague todos os subdiretorios e arquivos contidos nela.

 

Vi no site do php.net, a função rmdir ( http://php.net/rmdir ) e neste endereço vi também uma função recursiva para fazer isto que quero.

Segue a função que vi por lá:

function recursiveRemoveDirectory($path)   {   	   $dir = new RecursiveDirectoryIterator($path);	   #echo '<h3>'.$dir.'</h3>';	   //Remove all files	   foreach(new RecursiveIteratorIterator($dir) as $file)	   {		   unlink($file);	   }	   //Remove all subdirectories	   foreach($dir as $subDir)	   {		   //If a subdirectory can't be removed, it's because it has subdirectories, so recursiveRemoveDirectory is called again passing the subdirectory as path		   if(!@rmdir($subDir)) //@ suppress the warning message		   {			   recursiveRemoveDirectory($subDir);		   }	   }	   //Remove main directory	   rmdir($path);   }
Ainda não sou muito familiriazado com PHP, não sei pq nesta função, usa o new para instanciar novamente a mesma função, parecesse coisa do JavaScript.

 

Mas bem, o caso é que quando roda o script, aqui em casa, é gerado um erro: Permission denied

 

Como faço para resolver?

 

Valeu galera,

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal seria listar todos os arquivos da pasta e fazer um loop para apagar um por um...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, repare que na função existe um foreach, que está apagando arquivo por arquivo.E depois outro loop que apaga todos os subdiretórios.O caso é que está retornando este erro de PERMISSION DENIED.Alguém sabe como resolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... fiz um teste aqui e vou dizer a experiência que tive:- O erro que falei foi gerado no IIS, onde preciso dar permissões as pastas. Gostaria de saber como dar permissão de escrita/leitura de uma vez para todas as pastas.- No apache, consegui apagar quase tudo... um subdiretório somente não foi apagado, não sei pq, e devolveu o mesmo erro de PERMISSION DENIED. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... fiz um teste aqui e vou dizer a experiência que tive:- O erro que falei foi gerado no IIS, onde preciso dar permissões as pastas. Gostaria de saber como dar permissão de escrita/leitura de uma vez para todas as pastas.- No apache, consegui apagar quase tudo... um subdiretório somente não foi apagado, não sei pq, e devolveu o mesmo erro de PERMISSION DENIED. :(

[ GuTo ], não sei se é o que quer, mas tenta fazer assim para dar permissão no windows, abra meu computador, vá em ferramentas, depois opções de pasta..., em seguida em modo de exibição, desmarque usar compartilhamento simples de arquivo, e então na pasta que você quer dar permissão clique com o botão direito do mouse e vá em propriedades, aprecerá agora uma opção de segurança, vá nela e então sete as permissões dos usuários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu hcar, vou dar uma olhada quando chegar em casa.

 

Tentei executar esta mesma pagina no servidor remoto, que usa Apache 2.x (não lembro ao certo, mas é 2 alguma coisa), e deu o mesmo problema de permissão negada.

 

Via código PHP, conseguimos dar permissões a pastas e suas subpastas e seus arquivos?

Andei lendo no php.net sobre o comando chmod(), ele realmente adianta nestes casos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guto,Sempre que tu fizer upload de arquivos dá um chmod pois senão pode ser que tu não tenha permissão para excluílos depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum...

Mas isso você diz quando eu fizer o upload via php ou via ftp? :blink:

 

Pq eu queria poder apagar os arquivos do servidor remoto usando a função essa, quando eu quisesse, sem precisar me preocupar com a permissão que tenho, pois eu quero tê-la e pronto, rs.

 

E por exemplo, nesta função aí, antes de excluir qualquer arquivo ou qualquer pasta, se eu fizesse:

chmod(path,0777);//http://php.net/chmod
Com isso, eu daria todas as permissões pro arquivo, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei usar essa função aí tbm, mas não funcionou de jeito algum. Preferi criar minha própria, funciona perfeitamente aqui:

function removeDirectory($dir) {		 $abreDir = opendir($dir);		 while (false !== ($file = readdir($abreDir))) {			   if ($file==".." || $file ==".") continue;			   if (is_dir($cFile=($dir."/".$file))) removeDirectory($cFile);			   elseif (is_file($cFile)) unlink($cFile);		 }		 		 closedir($abreDir);		 rmdir($dir);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o chmod funciona da forma que tu disse sim desde que o usuário do apache tenha permissão sobre o arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guto,Sempre que tu fizer upload de arquivos dá um chmod pois senão pode ser que tu não tenha permissão para excluílos depois.

Certo, e me explica isso.Quando eu for enviar os arquivos pro servidor via FTP, como vou dar um chmod?

Compartilhar este post


Link para o post
Compartilhar em outros sites

P*rra, que loko! :)E aí, fazer upload via código daí? Não fica mais "complicado"?É que uso uma extensão para FireFox (FireFTP) que simula um programa de FTP (é excelente) e envia tudo, sincroniza e etc. :)Teria algo para isso daí?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, achei legal essa idéia, mas no momento meu foco é apenas dar as permissões para poder excluir os arquivos, pq depois os envio via FTP, mas no caso para excluir precisa ser por código.E não sei se toda hora vou ter que ir no administrador do servidor dar as permissões, por isso, gostaria de uma solução via código, que quando fosse excluir os arquivos e pastas, antes mesmo já desse as permissões. Isso tem como? (No caso, usando o chmod(arquivo,0777) antes de chamar unlink() ou rmdir())Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

estava lendo o tópico e para quem o mesmo problema, descobri que primeiro deve-se fechar a pasta antes de exclui-láacho que isso dá so no windows...flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Eu tentei usar essa função aí tbm, mas não funcionou de jeito algum. Preferi criar minha própria, funciona perfeitamente aqui:

function removeDirectory($dir) {
		 $abreDir = opendir($dir);

		 while (false !== ($file = readdir($abreDir))) {
			   if ($file==".." || $file ==".") continue;
			   if (is_dir($cFile=($dir."/".$file))) removeDirectory($cFile);
			   elseif (is_file($cFile)) unlink($cFile);
		 }
		 
		 closedir($abreDir);
		 rmdir($dir);
}

 

 

Desculpem reviver o tópico, mas esta sua função funcionou legal, exceto por um pequeno problema.

Ela esta excluindo a pasta que deve + a pasta anterior a esta (a qual não deve ser excluída).

 

Por exemplo,

A pasta que deve ser excluída é essa que passo ali em $nomeGaleria.

$pasta = "../uploads/galerias/".$nomeGaleria.'/';

Mas esta função esta excluindo também a pasta galerias. Por que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.