我需要汇总上传文件的大小并确定是 kb、mb 还是 gb 的大小格式。
细节:当用户上传图片时,图片属性是通过全局$_FILES获取的。例如,如果用户上传了一张 29.6kb 的图片,而我决定检查上传图片的大小,则 $_FILES[size] 数组将大小回显为 30358。
我试图对从 $_FILES[size] 获得的值做的是将图片大小从 30758 舍入到 31,然后将文件大小格式(kb、mb 或 gb)连接到它并回显为31kb。
我真的希望得到帮助...谢谢!
我需要汇总上传文件的大小并确定是 kb、mb 还是 gb 的大小格式。
细节:当用户上传图片时,图片属性是通过全局$_FILES获取的。例如,如果用户上传了一张 29.6kb 的图片,而我决定检查上传图片的大小,则 $_FILES[size] 数组将大小回显为 30358。
我试图对从 $_FILES[size] 获得的值做的是将图片大小从 30758 舍入到 31,然后将文件大小格式(kb、mb 或 gb)连接到它并回显为31kb。
我真的希望得到帮助...谢谢!
那是怎么回事?
$file = $_FILES[size];
$s = 'kb';
$x = round($file/1000, 1);
if($x > 1000){
$x = $x/1000;
$s = 'mb';
} else if($x > 100000) {
$x = $x/100000;
$s = 'gb';
}
echo $x . ' ' . $s;
您可以通过使用 php 命令 round(float) 和一些简单的数学来完成此操作:
define("K",1024);
define("M",1048576);
define("G",1073741824);
$size = $_FILES[size];
$gigs = $size / G;
$megs = ($size - ($gigs * G)) / M;
$kils = ($size - ($gigs * G) - ($megs * M)) / K;
if($gigs > 0) echo(round($gigs));
elseif($megs > 0) echo(round($megs));
elseif($kils > 0) echo(round($kils));
else echo("Size is zero");
Laravel使用这个辅助函数:
function get_file_size($size)
{
$units = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB');
return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2).' '.$units[$i];
}
*来源:https ://github.com/laravel/laravel/blob/master/laravel/helpers.php
我还没有看到更优雅的方式来做到这一点。