Beware of empty files!<?php // Wrong $exp = floor(log($bytes) / log(1024)); //Correct $exp = $bytes ? floor(log($bytes) / log(1024)) : 0;?>
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
disk_total_space — Returns the total size of a filesystem or disk partition
Given a string containing a directory, this function will return the total number of bytes on the corresponding filesystem or disk partition.
directory
A directory of the filesystem or disk partition.
Returns the total number of bytes as a float
або false
в разі помилки.
Приклад #1 disk_total_space() example
<?php
// $ds contains the total number of bytes available on "/"
$ds = disk_total_space("/");
// On Windows:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>
Зауваження: Ця функція незастосовна для роботи з віддаленими файлами, оскільки файл повинен бути доступним через файлову систему сервера.
Beware of empty files!<?php // Wrong $exp = floor(log($bytes) / log(1024)); //Correct $exp = $bytes ? floor(log($bytes) / log(1024)) : 0;?>
For a non-looping way to add symbols to a number of bytes:<?phpfunction getSymbolByQuantity($bytes) { $symbols = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'); $exp = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$symbol[$exp], ($bytes/pow(1024, floor($exp))));}
To find the total size of a file/directory you have to differ two situations:(on Linux/Unix based systems only!?)you are interested:1) in the total size of the files in the dir/subdirs2) what place on the disk your dir/subdirs/files uses- 1) and 2) normaly differs, depending on the size of the inodes- mostly 2) is greater than 1) (in the order of any kB)- filesize($file) gives 1)- "du -ab $file" gives 2)so you have to choose your situation!on my server I have no rights to use "exec du" in the case of 2), so I use: $s = stat($file); $size = $s[11]*$s[12]/8);whitch is counting the inodes [12] times the size of them in Bits [11]hopes this helps to count the used disk place in a right way... :-) Andreas Dick
function roundsize($size){ $i=0; $iec = array("B", "Kb", "Mb", "Gb", "Tb"); while (($size/1024)>1) { $size=$size/1024; $i++;} return(round($size,1)." ".$iec[$i]);}