function.size_readable.php
Return human readable sizes
- Author: Aidan Lister <aidan@php.net>
- Version: 1.1.0
- Link: http://aidanlister.com/repos/v/function.size_readable.php
- Views: 24032
- Downloads: 2226
Source
<?php
/**
* Return human readable sizes
*
* @author Aidan Lister <aidan@php.net>
* @version 1.1.0
* @link http://aidanlister.com/repos/v/function.size_readable.php
* @param int $size Size
* @param int $unit The maximum unit
* @param int $retstring The return string format
* @param int $si Whether to use SI prefixes
*/
function size_readable($size, $unit = null, $retstring = null, $si = true)
{
// Units
if ($si === true) {
$sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB');
$mod = 1000;
} else {
$sizes = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
$mod = 1024;
}
$ii = count($sizes) - 1;
// Max unit
$unit = array_search((string) $unit, $sizes);
if ($unit === null || $unit === false) {
$unit = $ii;
}
// Return string
if ($retstring === null) {
$retstring = '%01.2f %s';
}
// Loop
$i = 0;
while ($unit != $i && $size >= 1024 && $i < $ii) {
$size /= $mod;
$i++;
}
return sprintf($retstring, $size, $sizes[$i]);
}
?>
Example
<pre>
<?php
require_once 'function.size_readable.php';
// Simple
echo "Simple:\n";
echo size_readable(55), "\n";
echo size_readable(55555555555555), "\n\n";
// Maximum unit
echo "Max units in MB:\n";
echo size_readable(55555555555555, 'MB'), "\n\n";
// 4 decimal accuracy
echo "4 decimals:\n";
echo size_readable(55555555555555, null, '%01.4f %s'), "\n\n";
// 1 decimal accuracy, units in brackets, max unit in MB
echo "1 decimal, units in brackets, max unit of MB:\n";
$size = disk_total_space('/home/aidan');
echo size_readable($size, 'MB', '%01.1f (%s)');
?>
</pre>
Output
Simple: 55.00 B 55.56 TB Max units in MB: 55555555.56 MB 4 decimals: 55.5556 TB 1 decimal, units in brackets, max unit of MB: 231769.3 (MB)
Comments