2010-01-01 5 views
0

Je peux créer un dossier d'image quand je crée une catégorie, de sorte que je puisse télécharger des images là.Comment supprimer un dossier avec PHP?

Maintenant, je veux supprimer ce dossier lorsque je supprime la catégorie.

Le code pour créer un dossier est le suivant et fonctionne bien.

function create(){ 
if ($this->input->post('name')){ 
    $this->MCats->addCategory(); 
    $folder = $this->input->post('name'); 
    $folder = strtolower($folder); 
    $folder = str_replace(" ", "_", $folder); 
    $folder = 'images/'.$folder; 
    $this->_create_path($folder); 
... 
... 
} 


function _create_path($folder) 
{ 
    // create dir if not exists 
    $folder = explode("/" , $folder); 
    $mkfolder = ""; 
    //sets the complete directory path 
    for( $i=0 ; isset($folder[$i]) ; $i++) 
    { 
     $mkfolder .= $folder[$i] . '/'; 
     if(!is_dir($mkfolder)) mkdir("$mkfolder"); 
    } 
} 

Et je viens avec le code suivant. Mais je ne suis pas sûr de savoir comment utiliser rmdir pour qu'il ne supprime pas le dossier images. Je veux enlever seulement le dossier d'enfant des images.

function delete($id){ 

$cat = $this->MCats->getCategory($id); 
    // This will pull the name of category name. 
$catname = $cat['name']; 
$catname = strtolower($catname); 
$catname = str_replace(" ", "_", $catname); 
$catname = 'images/'.$catname; 
    $this->_remove_path($catname); 
... 
... 
} 
function _remove_path($folder) 
{ 

} 

Je ne sais pas comment procéder après cela.

Quelqu'un peut-il me donner quelques suggestions s'il vous plaît?

+0

Dupe: http://stackoverflow.com/questions/1447791/delete-directory-in-php –

+0

Ici aussi: http://stackoverflow.com/questions/1334398/how-to-delete-a -folder-with-contents-using-php –

Répondre

2
$this->_remove_path($catname); // because previous parts you're using $catname 

Ensuite, la fonction chemin supprimer

// recursively remove all files and sub-folder in that particular folder 
function _remove_path($folder){ 
    $files = glob($folder . DIRECTORY_SEPARATOR . '*'); 
    foreach($files as $file){ 
     if($file == '.' || $file == '..'){continue;} 
     if(is_dir($file)){ 
      $this->_remove_path($file); 
     }else{ 
      unlink($file); 
     } 
    } 
    rmdir($folder); 
} 
+0

Pouvez-vous expliquer ce qui se passe dans foreach? S'il vous plaît. – shin

+0

il fera une boucle pour voir s'il y a des répertoires ou des fichiers dans ce sous-dossier avant la suppression. il supprimera alors le sous-dossier ou les fichiers. rmdir échouera s'il reste des fichiers ou des sous-dossiers dans le dossier que vous voulez supprimer. – mauris

+0

Cela fonctionne, merci. – shin

1

Vous devez utiliser unlink et rmdir:

$handler = opendir($folder); 
if (!$handler) { 
    trigger_error('File Error: Failed to open the directory ' . $folder, E_USER_ERROR); 
    return false; 
} 

// list the files in the directory 
while ($file = readdir($handler)) { 
    // if $file isn't this directory or its parent, 
    if ($file != '.' && $file != '..' && !is_dir($file)) { 
     // delete it 
     if (!unlink($file)) { 
      trigger_error('File Error: Failed to remove file ' . $file, E_USER_ERROR); 
     } 
    } 
} 

// tidy up: close the handler 
closedir($handler); 

if (!rmdir($folder)) { 
    trigger_error('File Error: Failed to remove folder ' . $folder, E_USER_ERROR); 
} 
0

Ma version modifiée de Darryl Hein de Code fonctionne comme un charme pour moi.

function remove_path2($path) { 
    if(is_dir($path)) { 
     $handler = opendir($path); 
     if (!$handler) { 
      trigger_error('File Error: Failed to open the directory ' . $path, E_USER_ERROR); 
      return; 
     } 

     // list the files in the directory 
     while ($file = readdir($handler)) { 
      if ($file != '.' && $file != '..') 
       remove_path2($path.DIRECTORY_SEPARATOR.$file); 
     } 

     // tidy up: close the handler 
     closedir($handler); 

     if (!rmdir($path)) { 
      trigger_error('File Error: Failed to remove folder ' . $path, E_USER_ERROR); 
     } 
    } 
    else { 
     // delete it 
     if (!unlink($path)) { 
      trigger_error('File Error: Failed to remove file ' . $path, E_USER_ERROR); 
     } 
    } 
} 
Questions connexes