Skip to content

Instantly share code, notes, and snippets.

@eusonlito
Last active March 11, 2025 07:56
Show Gist options
  • Select an option

  • Save eusonlito/5099936 to your computer and use it in GitHub Desktop.

Select an option

Save eusonlito/5099936 to your computer and use it in GitHub Desktop.
PHP function to get the folder size including subfolders
<?php
function folderSize ($dir)
{
$size = 0;
foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) {
$size += is_file($each) ? filesize($each) : folderSize($each);
}
return $size;
}
@mfka
Copy link
Copy Markdown

mfka commented Oct 25, 2016

well Done! And thank you :)

@Blueblazer172
Copy link
Copy Markdown

awasome function πŸ‘ πŸ’―

@mdimitris
Copy link
Copy Markdown

The result is in bytes or KB? Thank you!

@vishnu1991
Copy link
Copy Markdown

@mdimitris " bytes"
Hope you must have got the answer πŸ˜„

@comm1x
Copy link
Copy Markdown

comm1x commented Mar 21, 2017

Thanks

@miladghiravani
Copy link
Copy Markdown

miladghiravani commented Apr 4, 2017

Thanks

@anhphamt
Copy link
Copy Markdown

many thanks.

@redoxate
Copy link
Copy Markdown

<3

@sakonachhoeurng
Copy link
Copy Markdown

hi what is folderSize($each); I think this one should be undefined

@ArsSirek
Copy link
Copy Markdown

ArsSirek commented Nov 9, 2017

@sakonachhoeurng Hi, you probably noticed already) but just in case, It's the function name - recursive call, to count all subfolders as fell.

@hellerbenjamin
Copy link
Copy Markdown

Perfect.

@chrisw90uk
Copy link
Copy Markdown

Perfect - thanks for your help!

@1uc
Copy link
Copy Markdown

1uc commented Jan 30, 2018

Nice, however, at least on Linux, it won't include dot-files (since * does not match .some-file). Furthermore, on my machine an empty directory still occupies some space (4096 bytes according to du), this is also not included in folderSize.

Oh, and thanks, I'm using something very similar.

@brehehe
Copy link
Copy Markdown

brehehe commented Mar 5, 2018

Cool thank you

@CrashedBboy
Copy link
Copy Markdown

Thanks! It helps me a lot.

@ipara-dev
Copy link
Copy Markdown

ipara-dev commented Jul 19, 2018

For directory size:
if($size<1024){$size=$size." Bytes";}
elseif(($size<1048576)&&($size>1023)){$size=round($size/1024, 1)." KB";}
elseif(($size<1073741824)&&($size>1048575)){$size=round($size/1048576, 1)." MB";}
else{$size=round($size/1073741824, 1)." GB";}
return $size;

@faustfizz
Copy link
Copy Markdown

Thanks a lot

@DeBelserArne
Copy link
Copy Markdown

Great, thanks! Using this!

@buttflattery
Copy link
Copy Markdown

buttflattery commented Sep 10, 2019

Nice but nothing beats the Swag of the following when the directory size is large.

    $f = './path/directory';
    $io = popen ( '/usr/bin/du -sk ' . $f, 'r' );
    $size = fgets ( $io, 4096);
    $size = substr ( $size, 0, strpos ( $size, "\t" ) );
    pclose ( $io );
    echo 'Directory: ' . $f . ' => Size: ' . $size;

@hemaguse
Copy link
Copy Markdown

Gracias!!

@2gbeh
Copy link
Copy Markdown

2gbeh commented May 12, 2020

@eusonlito Perfect πŸ‘

@SparcV8
Copy link
Copy Markdown

SparcV8 commented Jul 25, 2020

Regards,
some fast solution for Windows?

@carpad88
Copy link
Copy Markdown

carpad88 commented Aug 1, 2020

This function converts bytes:

function sizeFilter($bytes)
    {
        $label = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');

        for ($i = 0; $bytes >= 1024 && $i < (count($label) - 1); $bytes /= 1024, $i++) ;

        return (round($bytes, 2) . " " . $label[$i]);
    }

@kangjeki
Copy link
Copy Markdown

Perfect..

@Chrishow2
Copy link
Copy Markdown

Great!

Copy link
Copy Markdown

ghost commented May 20, 2021

Va perfecto, gracias πŸ‘

@ahtun
Copy link
Copy Markdown

ahtun commented May 22, 2023

-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)

    $f = './path/directory';
    $io = popen ( '/usr/bin/du -sh ' . $f, 'r' );
    $size = fgets ( $io, 4096);
    $size = substr ( $size, 0, strpos ( $size, "\t" ) );
    pclose ( $io );
    echo 'Directory: ' . $f . ' => Size: ' . $size;

@webdev23
Copy link
Copy Markdown

webdev23 commented Jun 2, 2024

In GigaBytes:

return $size / 1e-9; //GigaBytes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment