PHP – Funzione per convertire i byte in grandezze varie

Il codice che segue – e che potete scaricare liberamente dal link sottostante per una più chiara comprensione – mostra una funzione che ha lo scopo di prendere un numero di byte e di trasformarlo in una grandezza appropriata.

Il procedimento è molto semplice e si basa sulla grandezza di $number, che viene confrontata prima con i valori più alti e, scalando, con valori sempre più bassi.

Per fare un esempio pratico, poniamo che a $number attribuiamo un valore di 20.971.520 byte (che corrisponde esattamente a 20 megabyte).
I primi due if nella funzione risulteranno falsi, perché $number è inferiore a 1.000.000.000 . Pertanto entreremo nella condizione successiva, quella relativa ai megabyte.
$number sarà convertito in megabyte e assumerà il nuovo valore di “20”.
La funzione quindi stamperà “20 MB”.

Il secondo argomento della funzione, $precision, serve per specificare il grando di precisione del numero risultante, cioè quante cifre dopo la virgola dobbiamo prendere.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function byte_convert($number = 0, $precision = 1){

	//il numero passato deve essere intero
	if( !is_numeric($number) ){
		return false;
	}

	$unit = ''; //suffisso dell'unità di misura

	//terabyte
	if($number >= 1000000000000){

		$number = round($number / 1099511627776, $precision);
		$unit = 'TB';

	//gigabyte
	}elseif($number >= 1000000000){

		$number = round($number / 1073741824, $precision);
		$unit = 'GB';

	//megabyte
	}elseif($number >= 1000000){

		$number = round($number / 1048576, $precision);
		$unit = 'MB';

	//kilobyte
	}elseif($number >= 1000){

		$number = round($number / 1024, $precision);
		$unit = 'KB';

	//byte
	}else{

		$unit = 'byte';
		return number_format($number).' '.$unit;

	}

	return number_format($number, $precision).' '.$unit;

}


Vediamo un paio di esempi pratici, che trovate nello script da scaricare:

1
2
3
4
5
6
7
//stampa: 48.7 MB
$byte = 51107725;
echo byte_convert($byte)."<br /><br />";

//stampa: 1.2 KB
$byte = 1179;
echo byte_convert($byte);

La funzione può essere facilmente personalizzata a piacere. Con un po’ di adattamento, per esempio, è possibile stampare a video tutti i formati possibile in base ai byte passati come argomento.

Etichette:,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *