• php获取某个目录大小


    大致就是不知道目录下面又多少层目录, 也不知道又多少文件, 需要统计占用空间大小, 这个可以用在 相册/数据库占用/网络U盘 等程序中.

      大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个txt文件就知道占用了多少空间, 不用频繁获取而读磁盘, 节省资源. 每次用户如果上传的文件或者删除了文件, 那么又重新进行统计. 当然, 也可以把统计结果保存到数据库里.

    <?
    /**
    * File: fetch user directory use size
    * Author: heiyeluren <heiyeluren_AT_gmail_com>
    * Create: 2005-9-19 16:20
    * Modifed: 2005-9-19 16:41
    */

    /*** 基本函数 ***/

    //计算目录大小
    function countDirSize(dir)
    {
    handle = opendir(dir);
    while (false!==(FolderOrFile = readdir(handle)))
    {
    if(FolderOrFile != "." && FolderOrFile != "..")
    {
    if(is_dir("dir/FolderOrFile")) {
    sizeResult += getDirSize("dir/FolderOrFile");
    } else {
    sizeResult += filesize("dir/FolderOrFile");
    }
    }
    }
    closedir(handle);
    return sizeResult;
    }

    //保存用户文件大小
    function saveDirSize(userDir)
    {
    userDirSize = countDirSize(userDir);
    if (!fp = fopen(userDir."/dir_size.txt", "w+")) {
    die("Open file failed");
    } else {
    fwrite(fp, dirSize);
    }
    }

    //获取用户目录的大小
    function getDirSize(userDir)
    {
    user = addslashes(userDir);
    sizeFile = userDir."/dir_size.txt";
    if (!fp = fopen(sizeFile, "r") {
    return 0;
    } else {
    dirSize = fread(fp, filesize(sizeFile));
    }
    return dirSize;
    }
    /*** 调用实例 ***/
    user = "heiyeluren";
    userPath = "./user/".user;

    //如果用户执行了删除或者上传文件的操作就重新获取目录大小
    if (action == "upload" || action == "delete") {
    saveDirSize(userPath);
    }

    userDirSize = getDirSize(userPath)/1024;
    echo "用户: ".user;
    echo "占用空间: ".userDirSize;

    ?>

  • 相关阅读:
    DispatcherServlet?
    解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法?
    面向对象的特征有哪些方面?
    服务调用是阻塞的吗?
    构造器Constructor是否可被override?
    迭代器和枚举之间的区别?
    Kafka 判断一个节点是否还活着有那两个条件?
    数据传输的事务定义有哪三种?
    mq 的缺点 ?
    如何获取 topic 主题的列表?
  • 原文地址:https://www.cnblogs.com/kuyuecs/p/1331110.html
Copyright © 2020-2023  润新知