如何用PHP删除文件夹?

时间:2010-01-01 09:40:48

标签: php rmdir

我可以在创建类别时创建图像文件夹,以便我可以在那里上传图像。

现在我想在删除类别时删除该文件夹。

创建文件夹的代码如下,效果很好。

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

我想出了以下代码。但我不知道如何使用rmdir,以便它不会删除图像文件夹。我想只删除图像文件夹的子项。

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

}

我不确定如何继续。

有人可以给我一些建议吗?

3 个答案:

答案 0 :(得分:2)

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

然后删除路径功能

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

答案 1 :(得分:1)

您需要使用unlinkrmdir

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

答案 2 :(得分:0)

我修改后的 Darryl Hein Code版本对我来说就像一个魅力。

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