Pregunta

Me puede crear una carpeta de imágenes cuando se crea una categoría, así que puedo subir imágenes allí.

Ahora quiero borrar esa carpeta cuando se borra la categoría.

Código para crear una carpeta es el siguiente y funciona 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");
    }
}

Y me vienen con el siguiente código. Pero no estoy seguro de cómo usar rmdir por lo que no va a eliminar las imágenes de la carpeta. Quiero eliminar hijo único de la carpeta de imágenes.

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

}

No estoy seguro de cómo proceder después de esto.

Puede alguien darme algunas sugerencias por favor?

¿Fue útil?

Solución

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

A continuación, la función de trayectoria remove

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

Otros consejos

Tendrá que utiliza de desenlace y 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);
}

Mi versión modificada de Darryl Hein 's Código funciona como un encanto para mí

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);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top