Bytes to human en vice versa

  • PHP
  • Snippets

Met de volgende snippets kun je bytes converteren naar leesbare tekst en vice versa.

De eerste snippet bytes_to_human converteert bytes naar tekst.
8589934592 => 8 GB

De tweede snippet human_to_bytes converteert tekst naar bytes.
4 GB => 4294967296

/**
 * bytes_to_human()
 *
 * this function converts bytes to a human readable format
 *
 * @param mixed $size Size in bytes
 * @return string human readable size
 */
if(!function_exists('bytes_to_human'))
{
	function bytes_to_human($size)
	{
		if (preg_match('/^([0-9\.]+)\s*([KMGTPEZY]B)$/i', $size))
		{
			return $size;
		}
		else if(!is_numeric($size))
		{
			return '';
		}
		else if($size < 0)
		{
			$negative = '- ';
			$size = abs($size);
		}
		else
		{
			$negative = '';
		}
		$names = array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");
		return $size ? $negative.round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) .' '.$names[$i] : '0 Bytes';
	}
}

// --------------------------------------------------------------------

/**
 * human_to_bytes
 *
 * this function converts human readable size to bytes
 *
 * @param mixed $size Size
 * @return int size in bytes
 */

if(!function_exists('human_to_bytes'))
{
	function human_to_bytes($size)
	{
		$bytes = 0;
		$matches = array();
		$size = str_replace(',' ,'.', $size); //eliminate comma's

		if(is_numeric($size))
		{
			$bytes = $size;
		}
		else if (preg_match('/^([0-9\.]+)\s*([KMGTPEZY])?(B(ytes)?)?$/i', $size, $matches))
		{
			$size = $matches[1];
			$orders = array("K", "M", "G", "T", "P", "E", "Z", "Y");
			$order = array_search(strtoupper($matches[2]), $orders);
			if($order === FALSE)
			{
				$bytes = $size; // Assume bytes
			}
			else
			{
				$multiplier = pow(2, ($order + 1) * 10);
				$bytes = $size * $multiplier;
			}
		}
		return $bytes;
	}
}

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *