PHP collection of file size formatting functions

  • 2021-01-22 04:55:47
  • OfStack

For example, when we come across a large file with the number 49957289167B, we still don't know what the size of this file is. We convert it into GB, which is 46.53GB. This can be done with the following functions:


// Conversion unit 
function setupSize($fileSize) {
    $size = sprintf("%u", $fileSize);
    if($size == 0) {
         return("0 Bytes");
    }
    $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i];
}
function byte_format($size, $dec=2){
    $a = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
         $size /= 1024;
           $pos++;
    }
    return round($size,$dec)." ".$a[$pos];
 }
/* Use : echo format_size(filesize("fichier"));
Example result : 13,37 Ko */
function format_size($o) {
    $size = array('Go' => 1073741824, 'Mo' => 1048576, 'Ko' => 1024, 'octets' => 1);
    foreach ($size as $k => $v)
        if ($o >= $v) {
                if ($k == 'octets')
                        return round($o).' '.$k;
                return number_format($o / $v, 2, ',', ' ').' '.$k;
        }
}
/**
 *  File size formatting 
 * @param integer $size  Initial file size, in byte
 * @return array  An array of formatted file sizes and units in byte , KB , MB , GB , TB
 */
function file_size_format($size = 0, $dec = 2) {
    $unit = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
        $size /= 1024;
        $pos++;
    }
    $result['size'] = round($size, $dec);
    $result['unit'] = $unit[$pos];
    return $result['size'].$result['unit'];
}
echo file_size_format(123456789);
/**
 *  File size unit formatting 
 * @param $bytes  File actual size, unit byte
 * @param $prec  Accuracy after conversion, default accuracy to two decimal places 
 * @return  The converted size + String of units 
 */
 function fsizeformat($bytes,$prec=2){
    $rank=0;
    $size=$bytes;
    $unit="B";
    while($size>1024){
        $size=$size/1024;
        $rank++;
    }
    $size=round($size,$prec);
    switch ($rank){
        case "1":
            $unit="KB";
            break;
        case "2":
            $unit="MB";
            break;
        case "3":
            $unit="GB";
            break;
        case "4":
            $unit="TB";
            break;
        default :

    }
    return $size." ".$unit;
 }
/** 
 *   Capacity formatting  
 * @param String    File name (file path)  
 * @return   Returns a formatted string if the file exists   An error message is returned if the error occurs   Unknown File 
 */  
function sizeFormat ($fileName){  
    // Gets the size of the file   
    @ $filesize=filesize($fileName);  
    // Returns an error message if the file does not exist   
    if(false==$filesize){  
       return 'Unknown File';  
    }
    // Formats file capacity information   
    if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';  
    elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';  
    elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' KB';  
    else $filesize = $filesize . ' Bytes';  
    return $filesize;  
}
// Test functions   
echo sizeFormat('config.inc.php');  
/**
  *  File size formatting 
  * @param type $filesize
  */
private function sizeCount($filesize)
{
    if ($filesize >= 1073741824) {
        $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
    } 

    else if ($filesize >= 1048576) {
        $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
    } 

    else if ($filesize >= 1024) {
        $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
    }
    return $filesize;
}

// The main function of this function is based on the number of bytes in the file, to determine the unit of statistics should be selected, that is 1 A file with a 1 Units such as MB Then the file must be less than 1GB ", otherwise of course GB As a unit, and the file is bigger than KB , otherwise it would have to be counted in smaller units. The code for this function is as follows 
//size()   Statistical file size 
function size($byte)
{
    if($byte < 1024) {
      $unit="B";
    }
    else if($byte < 10240) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 102400) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 1048576) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if ($byte < 10485760) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else if ($byte < 104857600) {
      $byte=round_dp($byte/1048576,2);
      $unit="MB";
    }
    else if ($byte < 1073741824) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else {
      $byte=round_dp($byte/1073741824, 2);
      $unit="GB";
    }

    $byte .= $unit;
    return $byte;
}
// Auxiliary function  round_up() , which is used to choose between decimal places, 4 Give up 5 Into the. 
function round_dp($num , $dp)
{
  $sh = pow(10 , $dp);
  return (round($num*$sh)/$sh);
}

In this way, we can well count the size of any one file, first through the system's own filesize() function to get the number of bytes of the file, and then use the above functions to convert to the appropriate units can be


Related articles: