php 删除指定目录下的所有空目录

主要是用到了scandir函数,利用此函数获取某个路径下的所有文件以及目录。递归调用.

再结合crontab定期清理。图片的话是根据数据库的url清除的。清理完图片清理目录、 

<?php

// 定义清理的目录
$directory = ROOT_PATH . '/images/clock/';
// 清理目录
deleteDirectory($directory);

/**
 * 递归删除空目录
 * @param $d
 * @return void
 */
function deleteDirectory($d){
    $files = scandir($d);
    foreach ($files as $file) {
        // 忽略当前目录和上级目录
        if($file === '.' || $file === '..') {
            continue;
        }
        // 当前路径
        $newFile = $d . '/' . $file;
        // 如果是目录,递归调用
        if(isChild($newFile) === 1) {
            deleteDirectory($newFile);
        }
        // 如果没有任何东西删除
        if(isChild($newFile) === 3) {
            rmdir($newFile);
        }
    }

}

/**
 * 判断目录下是否有子目录或文件
 * @param $d string (路径)
 * @return int 1:有子目录 2:有文件 3:没有子目录和文件
 */
function isChild($d){
    $files = scandir($d);
    foreach ($files as $file) {
        // 忽略当前目录和上级目录
        if($file === '.' || $file === '..') {
            continue;
        }
        // 当前路径
        $newFile = $d . '/' . $file;
        if(is_dir($newFile)) {
            return 1;
        }else{
            return 2;
        }
    }
    return 3;
}

第二种直接递归

// 定义清理的目录
$directory = ROOT_PATH . '/images/clock/';
// 清理目录
deleteDirectory($directory,$directory);

function deleteDirectory($d,$root){
    $files = array_diff(scandir($d), array('.','..'));
    // 如果目录为空,删除目录
    if(!$files){
        rmdir($d);
        return 1;
    }
    foreach ($files as $file) {
        // 当前路径
        $currentFile = $d . '/' . $file;
        if(is_dir($currentFile)){
            deleteDirectory($currentFile,$root);
        }
    }
    // 再次判断目录是否为空
    if(!array_diff(scandir($d), array('.','..')) && $d != $root){
        rmdir($d);
    }
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_最初の心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值