0

Guys Ive spent some time trying to see whats wrong but im getting nowhere....

Let me explin what I want to do. Firstly I want to obtain the whole size of a directory (foldersize function). Secondly, i want to pass that number (in bytes) to the foldersize_formatted function to show the number in bytes, mb etc...

Problem is i obtain the right size, but end up with 'bytes' instead on GB (example). I have found & tried other samples from the net that would replace my foldersize_formatted function, but they also give me the same result!

Can any guru guide me with this issue?

Regards,
Ryan

echo foldersize($fullpath);



function foldersize_formatted($size_bytes){

    if ($size_bytes < 1024)  {

    $size_formatted = number_format($size_bytes, 2, '.', '');   
    $size_formatted = $size_formatted . ' Bytes';   
    return $size_formatted;
    }

    elseif ($size_bytes < 1048576)  {
    $size_formatted = $size_bytes / 1024 ;
    $size_formatted = number_format($size_formatted, 2, '.', '');   
    $size_formatted = $size_formatted . ' KB';
    return $size_formatted;

    }

    elseif ($size_bytes < 1073741824)  {
    $size_formatted = $size_bytes / 1048576 ;
    $size_formatted = number_format($size_formatted, 2, '.', '');   
    $size_formatted = $size_formatted . ' MB';
    return $size_formatted;
    }

    else {
    $size_formatted = $size_bytes / 1073741824;
    $size_formatted = number_format($size_formatted, 2, '.', '');   
    $size_formatted = $size_formatted . ' GB';
    return $size_formatted;
    }


    }


function foldersize($path) {
    $total_size = 0;
    $files = scandir($path);
    $cleanPath = rtrim($path, '/'). '/';

    foreach($files as $t) {
        if ($t<>"." && $t<>"..") {
            $currentFile = $cleanPath . $t;
            if (is_dir($currentFile)) {
                $size = foldersize($currentFile);
                $total_size += $size;
            }
            else {
                $size = filesize($currentFile);
                $total_size += $size;
            }
        }   
    }
return foldersize_formatted($total_size);

}
2
Contributors
3
Replies
30
Views
4 Years
Discussion Span
Last Post by delta_frost
0

The function seems foldersize_formatted() seems to be working fine.Tried large numbers and it worked(always got the corresponding suffix).Just for debugging echo the $total_size variable before passing it to the function.As far as I know,PHP doesn't have a concept of overflow(not for numbers in the range we are dealing with here).The only way you get bytes at the end is if your input is less than 1024 (-ve ?)

0

Firstly, thanks for the reply. This is the strange part I am not understanding as I have a folder which is 600mb. When passing it through the foldersize() i get the correct result (in bytes). But when passing the value to folder_size_formatted() the value is converted to MB correctly(600mb) but 'bytes' still gets concatinated to the variable.

So I end up with '600 Bytes'!

It should only add 'bytes' if the value is lower than 1024...but its not for some reason....

0

There is a little flaw in your foldersize() function.It returns the size of only files immediately inside it.If there are nested subdirectories,then it fails. Could that be a problem as to why you are getting an incorrect result(Though you already mentioned that you get the correct value before passing the value to your formatting function)

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.