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.