Convert file size denominations in PHP

Convert a file size from one measure to another. For example, take a file that is recorded as 512KB and have it converted to .5MB. Yeah, that’s an easy example, but that’s ‘cause I was writing it off the top of my head. So, if you need this sort of thing, here’s a function that I thought came out pretty well.

function convert_file_size($unit, $from, $to) {
  $sizes = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');

  list($pos1) = array_keys($sizes, strtoupper($from));
  list($pos2) = array_keys($sizes, strtoupper($to));

  $up = $pos1 < $pos2 ? true : false;
  for($i = $pos1; $i != $pos2; ($up ? $i++ : $i--)) {
    if ($up) { 
      $unit = $unit / 1024; 
    } else { 
      $unit = $unit * 1024; 
    }
  }

  return $unit;
}

So, simply use it like:

$kbytes = convert_file_size(2.7, 'MB', 'KB');

Is any of this code particularly special? No. Do I still think its neat? You betcha!

Tagged as: code convert denomination file php script size