2012-04-11 3 views
-2

J'ai la fonction suivante que j'essaie d'utiliser pour supprimer un dossier complet mais il ne semble pas supprimer d'idées ou de recommandations?PHP Supprimer un dossier complet

public function submit() 
{ 
     $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/'; 

     $folderName = $this->quote->getCompanyDetails()->companyName; 

     $data['companyContact'] = $this->quote->getCompanyDetails()->companyContact; 

     $this->load->view('submit',$data); 

     $this->quote->removeQuote(); 

     if(is_dir($location.$folderName) === TRUE) 
     { 
      $files = array_diff(scandir($location.$folderName), array('.','..')); 

      foreach($files as $file) 
      { 
       Delete(realpath($location.$folderName).'/'. $file); 
      } 
      return rmdir($location.$folderName); 
     } 
     else if(is_file($location.$folderName) === TRUE) 
     { 
      return unlink($location.$folderName); 
     } 
     return FALSE; 
} 

Mise à jour:

public function submit() 
{ 
     $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/'; 

     $folderName = $this->quote->getCompanyDetails()->companyName; 

     $data['companyContact'] = $this->quote->getCompanyDetails()->companyContact; 

     $this->load->view('submit',$data); 

     //$this->quote->removeQuote(); 

     $this->removeFolder(); 
} 

private function removeFolder(){ 
     $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/'; 

     $folderName = $this->quote->getCompanyDetails()->companyName; 

     foreach(glob($location.$folderName.'/*') as $file) 
     { 
      if(is_dir($location.$folderName)) 
      { 
       rmdir($location.$folderName); 
      }else{ 
       unlink($location.$folderName); 
      } 
      rmdir($location.$folderName); 
     } 
} 
+1

avez-vous la permission de supprimer des fichiers sur le système d'exploitation? – AMayer

+0

Vous appelez 'Delete' la première fois et 'unlink' la deuxième fois. Ne devrait-il pas être déconnecté les deux fois? – kingcoyote

+0

@AMayer Oui je le fais –

Répondre

1

Vous ne pouvez pas supprimer un dossier complet en un seul appel. Vous devriez le faire récursivement:

function rrmdir($dir) { 
    foreach(glob($dir . '/*') as $file) { 
     if(is_dir($file)) 
      rrmdir($file); 
     else 
      unlink($file); 
    } 
    rmdir($dir); 
} 
+0

J'ai mis à jour ma question cela fonctionnerait comme ça ? –

+0

Il n'essaie pas de supprimer un dossier complet en un seul appel. Bien qu'un peu de récursivité ne soit pas une mauvaise chose, il effectuait un scan en profondeur et en supprimait à partir de là. Et non, la version mise à jour ne fonctionnera pas car vous essayez d'appeler rmdir sur un dossier non vide. – kingcoyote

+0

@kingcoyote Vous êtes capable de fournir de la lumière? –

Questions connexes