For example, if you encounter a large file of 49957289167B, you will see that the unit behind such a long series of numbers is byte B. You still don’t know what the size of this file is. Let’s convert it into GB. , which is 46.53GB. This work can be done using the following functions:
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;
}
}
/**
* 文件大小格式化
* @param integer $size 初始文件大小,单位为byte
* @return array 格式化后的文件大小和单位数组,单位为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);
/**
* 文件大小单位格式化
* @param $bytes 文件实际大小,单位byte
* @param $prec 转换后精确度,默认精确到小数点后两位
* @return 转换后的大小+单位的字符串
*/
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 If the file exists, return a formatted string If an error occurs, return an error message Unknown File
*/
function sizeFormat ($fileName){
//Get the size of the file
@ $filesize=filesize($fileName);
//If the file No return error message
if(false==$filesize){
return 'Unknown File';
}
//Formatted 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 function
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 most important thing about this function is to judge the statistical unit that should be selected based on the number of bytes of the file. That is to say, if a file uses a certain unit such as MB, then the file must be less than 1GB, otherwise of course it must be GB is used as the unit, and the file must be larger than KB, otherwise smaller units must be used for statistics. The function code 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(), this function is used to select the number of decimal points and round.
function round_dp($num, $dp)
{
$sh = pow(10, $dp);
return (round($num*$sh)/$sh);
}
In this way, we can easily count the size of any file. First, we can obtain the number of bytes of the file through the filesize() function that comes with the system, and then use the above functions to convert it into appropriate units