希望有人可以解决这个问题。
我用它来显示文件夹中几个文件的文件大小...
number_format (round (filesize($currentfile) /1048576)) . "mb"
...显示我的文件名:
27MB
35MB
10mb
等
但是,如果filesize小于1mb,它在屏幕上显示为:
0MB
如何修改PHP,以便在遇到250k文件时,显示为“.25mb”?
提前致谢。
答案 0 :(得分:3)
嗯,您需要删除round
来电,它正在制作整数:
number_format (filesize($currentfile) /1048576, 2) . "mb"
这将给出:
27mb
35mb
10.25mb < if it's really 10.25mb
0.25mb
答案 1 :(得分:2)
最好创建一个功能,以便您可以在应用程序的其他位置重复使用它,然后如果您决定更改格式或稍后的某些内容,则可以在一个位置轻松完成。我确信那里有一些更优雅的东西,但为了简单起见,我刚刚掀起了一个:
function pretty_size($bytes, $dec_places = 1) {
$total = $bytes / 1024 / 1024 / 1024 / 1024;
$unit = 'TB';
if( $total < 1 ) {
$total = $bytes / 1024 / 1024 / 1024;
$unit = 'GB';
}
if( $total < 1 ) {
$total = $bytes / 1024 / 1024;
$unit = 'MB';
}
if( $total < 1 ) {
$total = $bytes / 1024;
$unit = 'KB';
}
if( $total < 1 ) {
$total = $bytes;
$unit = 'bytes';
}
return array(number_format($total, $dec_places), $unit);
}
您可以使用以下方法对其进行测试:
$numbers = array(
89743589734434,
39243243223,
3456544,
12342443,
324324,
4233,
2332,
32
);
foreach( $numbers as $n ) {
$size = pretty_size($n);
echo $size[0] . ' ' . $size[1] . '<br />';
}
上面的代码将产生这个:
81.6 TB
36.5 GB
3.3 MB
11.8 MB
316.7 KB
4.1 KB
2.3 KB
32.0 bytes
当然,如果您真的想将显示限制为仅几兆字节,则可以相应地更改功能。很容易:)
答案 2 :(得分:1)
更强大:
function fsize_fmt($bytes, $precision=2) {
$unit = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
for ($x=0; $bytes>=1024 && $x<count($unit); $x++) { $bytes /= 1024; }
return round($bytes, $precision) . ' ' . $unit[$x];
}
答案 3 :(得分:0)
嗯,你只需要检查它是否低于1MB并以不同的方式处理它。
number_format (filesize($currentfile) / 1048576, (filesize($currentfile) < 1048576 ? 2 : 0)) . "mb"
答案 4 :(得分:0)
if((filesize($currentfile) /1048576) >= 1)
number_format (round (filesize($currentfile) /1048576), 1) . "mb";
else
number_format (filesize($currentfile) /1048576, 2) . "mb"