Question
I can create a image folder when I create a category, so that I can upload images there.
Now I want to delete that folder when I delete the category.
Code for creating a folder is the following and works well.
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");
}
}
And I come up with the following code. But I am not sure how to use rmdir so that it will not remove images folder. I want to remove only child of images folder.
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)
{
}
I am not sure how to proceed after this.
Can anyone give me some suggestions please?
Solution
$this->_remove_path($catname); // because previous parts you're using $catname
Then the remove path function
// 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 );
}
OTHER TIPS
You'll need to used unlink and 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);
}
My modified version of Darryl Hein's Code works like a charm to 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);
}
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow