Cómo eliminar la carpeta con PHP?
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?
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);
}
}
}