繁体   English   中英

PHP通过不同的目录计数,并查看其中包含0个文件的目录

[英]PHP Count through different directories and see which ones have 0 files in them

我具有以下文件夹结构:

images/photo-gallery/2e/
                     72/
                     rk/
                     u3/
                     va/
                     yk/

... 等等。 基本上,每次上传图像时,它都会对名称进行哈希处理,然后使用前两个字母创建一个文件夹。 所以2e内部是2e0gpw1p.jpg

这就是事情...如果我删除图像,它将删除文件,但会保留其所在的文件夹。现在,当我上传了大量图像时,这很好,因为许多图像共享相同的图像文件夹..但直到那时,我最终将拥有一堆空目录。

我想做的是搜索相册文件夹,并遍历每个目录,看看哪些文件夹是空的。如果有任何空文件夹,它将删除它。

我知道如何对单个目录(例如2e文件夹)执行此操作。 但是,如何处理相册文件夹中的所有文件夹呢?

如果目录不为空,PHP函数rmdir()将引发警告,因此您可以在非空目录上使用它,而不必担心将其删除。 将其与scandir()和array_slice结合(以删除。和..),可以执行以下操作:

foreach(array_slice(scandir('images/photo-gallery'),2) as $dir) {
    @rmdir('images/photo-gallery/' . $dir); // use @ to silence the warning
}

虽然您可以使用php进行处理,但我倾向于将os用于此类任务。 当然,您可以使用php调用以下内容

find <parent-dir> -depth -type d -empty -exec rmdir -v {} \;

请阅读此警告,但我并未尝试使用类似次数的代码。 如果您不了解这样做的意思,那就不要使用它,否则有可能从服务器上擦除您的网站。

第一次尝试之前,请进行所有备份编辑,路径非常重要!

好的,这很简单:)

<?php
    function recursiveDelete($path){
        $ignore = array(
            'cgi-bin',
            '.',
            '..'
        ); // Directories to ignore

        $dh = opendir($path); // Open the directory

        while(false !== ($file = readdir($dh))){ // Loop through the directory

            if(!in_array($file, $ignore)){ // Check that this file is not to be ignored 

                if(is_dir($path."/".$file)){ // Its a directory, keep going

                    if(!iterator_count(new DirectoryIterator($path."/".$file)))
                        rmdir($path."/".$file); // its empty delete it
                    } else {
                        recursiveDelete($path."/".$file);// Recursive call to self
                    }

                }

            }

        }

        closedir($dh); // All Done close the directory 

    }

    // WARNING IMPROPERLY USED YOU CAN DUMP YOUR ENTIRE SERVER USE WITH CAUTION!!!!
    // I WILL NOT BE HELD RESPONSIBLE FOR MISUSE
    recursiveDelete('/some/directoy/path/to/your/gallery');
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM