123.45 B|KB|MB|GB|TB or {$filesize|fsize_format:"MB"} => 123.45 MB or {$filesize|fsize_format:"TB":4} => 0.0012 TB * Params: int size the filesize in bytes string format the format, the output shall be: B, KB, MB, GB or TB int precision the rounding precision string dec_point the decimal separator string thousands_sep the thousands separator * Install: Drop into the plugin directory * Version: * 2007-05-24 Version 0.3 - added the peta, exa, zeta, and yeta byte magnitudes thanks to coreone (at) gmail (dot) com * 2003-05-15 Version 0.2 - added dec_point and thousands_sep thanks to Thomas Brandl, tbrandl@barff.de * - made format always uppercase * - count sizes "on-the-fly" * 2003-02-21 Version 0.1 - initial release * ------------------------------------------------------------- */ function smarty_modifier_fsize_format($size, $format = '', $precision = 2, $dec_point = '.', $thousands_sep = ',') { $format = strtoupper($format); static $sizes = []; if (! count($sizes)) { $b = 1024; $sizes['B'] = 1; $sizes['KB'] = $sizes['B'] * $b; $sizes['MB'] = $sizes['KB'] * $b; $sizes['GB'] = $sizes['MB'] * $b; $sizes['TB'] = $sizes['GB'] * $b; $sizes['PB'] = $sizes['TB'] * $b; $sizes['EB'] = $sizes['PB'] * $b; $sizes['ZB'] = $sizes['EB'] * $b; $sizes['YB'] = $sizes['ZB'] * $b; $sizes = array_reverse($sizes, true); } //~ get "human" filesize foreach ($sizes as $unit => $bytes) { if ($size > $bytes || $unit == $format) { //~ return formatted size return number_format($size / $bytes, $precision, $dec_point, $thousands_sep).' '.$unit; } //~ end if } //~ end foreach } //~ end function