Domanda

Posso creare una cartella di immagini quando creo una categoria, in modo che possa caricare immagini lì.

Ora voglio eliminare quella cartella quando elimino la categoria.

Codice per la creazione di una cartella è la seguente e funziona bene.

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");
    }
}

E vengo con il seguente codice. Ma io non sono sicuro di come utilizzare rmdir in modo che non rimuoverà la cartella immagini. Voglio rimuovere unico figlio della cartella di immagini.

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)
{

}

Non sono sicuro di come procedere dopo questo.

Qualcuno mi può dare qualche suggerimento per favore?

È stato utile?

Soluzione

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

Poi la funzione di percorso Rimuovi

// 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 ); 
}

Altri suggerimenti

È necessario utilizzare unlink e 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);
}

La mia versione modificata del Darryl Hein 's Codice funziona come un fascino per me

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);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top