Format bytes with PHP – B, KB, MB, GB, TB, PB, EB, ZB, YB converter

php-logo

Simple PHP function that formats the bytes to the desired form. Possible unit options are:

  • Byte (B)
  • Kilobyte (KB)
  • Megabyte (MB)
  • Gigabyte (GB)
  • Terabyte (TB)
  • Petabyte (PB)
  • Exabyte (EB)
  • Zettabyte (ZB)
  • Yottabyte (YB)

Function takes three parameter: (bytes mandatory, unit optional, decimals optional)

PHP byteFormat function for formatting bytes

<?php
 
  function byteFormat($bytes, $unit = "", $decimals = 2) {
	$units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 
			'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);
 
	$value = 0;
	if ($bytes > 0) {
		// Generate automatic prefix by bytes 
		// If wrong prefix given
		if (!array_key_exists($unit, $units)) {
			$pow = floor(log($bytes)/log(1024));
			$unit = array_search($pow, $units);
		}
 
		// Calculate byte value by prefix
		$value = ($bytes/pow(1024,floor($units[$unit])));
	}
 
	// If decimals is not numeric or decimals is less than 0 
	// then set default value
	if (!is_numeric($decimals) || $decimals < 0) {
		$decimals = 2;
	}
 
	// Format output
	return sprintf('%.' . $decimals . 'f '.$unit, $value);
  }
 
?>

Example usage

echo byteFormat(4096, "B");
echo byteFormat(8, "B", 2);
echo byteFormat(1, "KB", 5);
echo byteFormat(1073741824, "B", 0);
echo byteFormat(1073741824, "KB", 0);
echo byteFormat(1073741824, "MB");
echo byteFormat(1073741824);
echo byteFormat(1073741824, "TB", 10);
echo byteFormat(1099511627776, "PB", 6);

Prints

4096.00 B
8.00 B
0.00098 KB
1073741824 B
1048576 KB
1024.00 MB
1.00 GB
0.0009765625 TB
0.000977 PB
Follow If Not True Then False Updates!

10 Comments

  1. Raaaddddd!
    Thanks dude. Saved me a bunch of time.

    I used this for formating bytes, btw:

    /**
    * filesize function.
    *
    * @access public
    * @static
    * @param mixed $size
    * @param int $round. (default: 0)
    * @return void
    */
    // http://www.veign.com/code-view.php?type=web&codeid=74
    public static function filesize($size, $round = 0) {
    $sizes = array(‘b’, ‘kb’, ‘meg’, ‘gb’, ‘tb’, ‘pb’, ‘eb’, ‘zb’, ‘yb’);
    for ($i=0; $size > 1024 && isset($sizes[$i+1]); $i++) $size /= 1024;
    return round($size, $round).$sizes[$i];
    }

  2. Thanks.

    • Dr Garg? How strange that I should find your name on a random website. I guess we were both looking for the same kind of info. :)

  3. not much helpful…..

  4. Amazing!!, but in the examples, consider remove the \n concat, because the example becomes difficult to read… greetings from Argentina.

    • Hi Juan,

      Thanks, I removed \n from examples and yes, you are right, it’s easier to read.

  5. Thanks man, very helpful function, i implemented it in my template engine.

    Thanks again

  6. Thanks, I owe you one.

  7. nice

  8. thanx sir for hlp me

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackbacks/Pingbacks

  1. Egonomik » PHP – Byte dönüştürme fonksiyonu (Convert bytes) - [...] "n"; echo byteFormat(1099511627776, "PB", 6) . "n";Kaynak: if-not-true-then-false.com Düzenleme için Umut‘a teÅŸekkürler. Benzer YazılarPHP – Resim üzerine yazı yazma …