A cleaner and more efficient way of making human readable file sizes:
<?php
function decodeSize( $bytes )
{
$types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
return( round( $bytes, 2 ) . " " . $types[$i] );
}
?>
disk_free_space
(PHP 4 >= 4.0.7, PHP 5)
disk_free_space — ディレクトリの利用可能なスペースを返す
説明
float disk_free_space
( string $directory
)
ディレクトリを指定することにより、 この関数は対応するファイルシステムまたはディスクパーティションで 利用可能なバイト数を返します。
パラメータ
- directory
-
ファイルシステムのディレクトリあるいはディスクパーティション。
注意: ディレクトリのかわりにファイル名を指定したときの挙動は未定義です。 OS や PHP のバージョンによって結果は異なります。
返り値
利用可能なバイト数を float 型で返します。
例
Example#1 disk_free_space() の例
<?php
// $df は「/」で利用可能なバイト数となります。
$df = disk_free_space("/");
// Windows の場合:
disk_free_space("C:");
disk_free_space("D:");
?>
注意
注意: この関数では、 リモートファイル を 使用することはできません。これは、処理されるファイルがサーバの ファイルシステムによりアクセスできる必要があるためです。
disk_free_space
rostvertol dot mil at gmail dot com
19-Feb-2008 04:27
19-Feb-2008 04:27
Nitrogen
11-Jan-2007 10:50
11-Jan-2007 10:50
Another easy way to convert bytes to human readable sizes would be this:
<?php
function HumanSize($Bytes)
{
$Type=array("", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta");
$Index=0;
while($Bytes>=1024)
{
$Bytes/=1024;
$Index++;
}
return("".$Bytes." ".$Type[$Index]."bytes");
}
?>
It simply takes the $Bytes and divides it by 1024 bytes untill it's no longer over or equal to 1024, meanwhile it increases the $Index to allocate which suffix belongs to the return (adding 'bytes' to the end to save some space).
You can easily modify it so it's shorter, but I made it so it's more clearer.
Nitrogen.
mixar at yandex dot ru
04-Dec-2006 08:33
04-Dec-2006 08:33
This the right function is:
function formatSize($size){
switch (true){
case ($size > 1099511627776):
$size /= 1099511627776;
$suffix = 'TB';
break;
case ($size > 1073741824):
$size /= 1073741824;
$suffix = 'GB';
break;
case ($size > 1048576):
$size /= 1048576;
$suffix = 'MB';
break;
case ($size > 1024):
$size /= 1024;
$suffix = 'KB';
break;
default:
$suffix = 'B';
}
return round($size, 2).$suffix;
}
djneoform at gmail dot com
12-Jul-2006 11:13
12-Jul-2006 11:13
List all drives, free space, total space and percentage free.
<?
for ($i = 67; $i <= 90; $i++)
{
$drive = chr($i);
if (is_dir($drive.':'))
{
$freespace = disk_free_space($drive.':');
$total_space = disk_total_space($drive.':');
$percentage_free = $freespace ? round($freespace / $total_space, 2) * 100 : 0;
echo $drive.': '.to_readble_size($freespace).' / '.to_readble_size($total_space).' ['.$percentage_free.'%]<br />';
}
}
function to_readble_size($size)
{
switch (true)
{
case ($size > 1000000000000):
$size /= 1000000000000;
$suffix = 'TB';
break;
case ($size > 1000000000):
$size /= 1000000000;
$suffix = 'GB';
break;
case ($size > 1000000):
$size /= 1000000;
$suffix = 'MB';
break;
case ($size > 1000):
$size /= 1000;
$suffix = 'KB';
break;
default:
$suffix = 'B';
}
return round($size, 2).$suffix;
}
?>
Ashraf M Kaabi
02-Mar-2005 01:38
02-Mar-2005 01:38
and also you can know the used space , in this
example :
<?
function disk_used_space($drive)
{
return disk_total_space("$drive:") - disk_free_space("$drive:");
}
echo disk_used_space('C');
?>
aidan at php dot net
16-Oct-2004 09:49
16-Oct-2004 09:49
To make human readable file sizes, see this function:
http://aidanlister.com/repos/v/function.size_readable.php