PHP filesize 超过2G文件信息错误处理

老虎说测试 脚本开发字数 669阅读2分13秒阅读模式
摘要最近在做一个媒体管理的工具,在利用PHP进行文件大小统计的时候,出现超过2G的文件,数据统计错误。

最近在做一个媒体管理的工具,在利用PHP进行文件大小统计的时候,出现超过2G的文件,数据统计错误。

我们先通过我们的简单的代码来看下出现的问题是什么:文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

首先我们准备了一个2.08G的文件:文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

PHP filesize 超过2G文件信息错误处理-图片1文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

 文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

然后我们利用下面的PHP代码进行分析(代码随便写的,只是为了测试):文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

function s($fsize){
    $unit = $fsize>pow(1024,3) ? array(3,"G") : ($fsize>pow(1024,2) ? array(2,"MB") : array(1,"KB"));
    return  round($fsize/(pow(1024,$unit[0])),3).$unit[1];
}
$dirName = 'K:\VIDEO\HD\3840X2160\[V00232]4K x 2K Original Makeup your world_100mbps.mp4';
echo s($fsize = sprintf("%u", (int)filesize($dirName)));
echo "<hr />";
echo s($fsize =  (int)filesize($dirName));

 文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

看下执行的结果:文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

 文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

PHP filesize 超过2G文件信息错误处理-图片2文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

 文章源自陈学虎-https://chenxuehu.com/article/2016/08/5540.html

通过代码发现,加了

sprintf("%u", filesize($file))

 

代码的,就能正常的解析正确数据了,为啥呢?

因为 PHP 的整数类型是有符号的,并且大多数平台使用 32 位整数,filesize() 函数在碰到大于 2GB 的文件时可能会返回非预期的结果。对于 2GB 到 4GB 之间的文件通常可以使用 sprintf("%u", filesize($file)) 来克服此问题。

 

 

 

 

 

 

 最后更新:2022-3-4
  • 版权声明:本文为原创文章,转载请附上原文出处链接及本声明。
  • 转载请注明:PHP filesize 超过2G文件信息错误处理 | https://chenxuehu.com/article/2016/08/5540.html