删除文件夹中的所有文件和文件夹,以及以。结尾的文件夹

时间:2014-02-22 09:58:06

标签: php recursion delete-file

我被要求创建一个删除文件夹中所有文件和文件夹的cron作业(递归) 排除某些文件扩展名。

我有这个代码(我在网上找到):

function rrmdir($dir) {
    $structure = glob(rtrim($dir, "/").'/*');
    if (is_array($structure)) {
        foreach($structure as $file) {
            if (is_dir($file)) rrmdir($file);
            elseif (is_file($file)) unlink($file);
        }
    }
    rmdir($dir);
}

将从指定的文件夹中删除ANYTHING, 但如上所述,我需要在插入中添加异常(不应删除所有'.php'文件)。

请假设文件夹的结构如下:

FOLDER1
FOLDER2
FOLDER3
FILE1.ZIP
FILE2.ZIP
DONOTDELETE1.PHP
DONOTDELETE2.PHP

因此,除了php文件

之外,应删除所有内容

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

这是修改过的功能试试吧。这将删除除*.php*.PHP以外的所有文件 文件

function rrmdir($dir) {
    $structure = glob(rtrim($dir, "/").'/*');

    $rm_dir_flag = true;

    if (is_array($structure))
    {
        foreach($structure as $file) 
        {
            if (is_dir($file))
            {
                rrmdir($file);
            }
            else if(is_file($file))
            {
                $ext = substr($file, -4);
                if($ext==".php" || $ext==".PHP")
                {
                    $rm_dir_flag = false;
                }
                else
                {
                    unlink($file);
                }   
            }   
        }
    }

    if($rm_dir_flag)
    {
        rmdir($dir);
    }   
}

更新2:

如果你想保护具有特定扩展名的文件,你可以这样做

rrmdir($your_directory, ".php");

//or

rrmdir($your_directory, ".pdf");

//or

rrmdir($your_directory, ".jpeg");

function rrmdir($dir, $protect_extension) {

       if(!is_dir($dir))
       {
             return;
       }
       $len = strlen($protect_extension)*(-1);


        $structure = glob(rtrim($dir, "/").'/*');

        $rm_dir_flag = true;

        if (is_array($structure))
        {
            foreach($structure as $file) 
            {
                if (is_dir($file))
                {
                    rrmdir($file, $protect_extension);
                }
                else if(is_file($file))
                {
                    $ext = substr($file, $len);
                    if($ext==$protect_extension || $ext==strtoupper($protect_extension))
                    {
                        $rm_dir_flag = false;
                    }
                    else
                    {
                        unlink($file);
                    }   
                }   
            }
        }

        if($rm_dir_flag)
        {
            rmdir($dir);
        }   
    }

答案 1 :(得分:0)

你能试试吗,添加了if($ext!='php'){

    function rrmdir($dir) {
        $structure = glob(rtrim($dir, "/").'/*');
        if (is_array($structure)) {
            foreach($structure as $file) {
                if (is_dir($file)){
                    rrmdir($file);
                }elseif(is_file($file)){
                    $info = pathinfo($file);
                    $ext = strtolower($info['extension']);
                    if($ext!='php'){
                        unlink($file);
                    }
                }
            }
        }
        rmdir($dir);
    }