Function accepts directory path as parameter and returns the total size of it. This function also considers all files and sub-folders of a directory for used space calculation.

Function

function dirSize($dir, $buf = 2) {

    static $buffer;
    if (isset($buffer[$dir]))
        return $buffer[$dir];
    if (is_file($dir))
        return filesize($dir);
    if ($dh = opendir($dir)) {
        $size = 0;
        while (($file = readdir($dh)) !== false) {
            if ($file == '.' || $file == '..')
                continue;
            $size+=dirsize($dir . '/' . $file, $buf - 1);
        }
        closedir($dh);
        if ($buf > 0)
            $buffer[$dir] = $size;
        return $size;
    }
    return false;
}

Then another function humanReadable() should be called over the result of dirSize Function. This function returns the human readable size of directory.

Function

function humanReadable($Bytes) {

    $Type = array("", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta");
    $Index = 0;
    while ($Bytes >= 1024) {
        $Bytes/=1024;
        $Index++;
    }
    return("" . $Bytes . " " . $Type[$Index] . "bytes");
}

Calling the function

// Size in bytes
$size=dirSize("D:/documents/photos");

// Size in human readable format
echo humanReadable($size);

Output

9.96 megabytes