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

  • A+
所属分类:PHP开发
摘要

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

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

我们先通过我们的简单的代码来看下出现的问题是什么:

首先我们准备了一个2.08G的文件:

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

 

然后我们利用下面的PHP代码进行分析(代码随便写的,只是为了测试):

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

 

看下执行的结果:

 

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

 

通过代码发现,加了

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

 

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

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

 

 

 

 

 

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar 烟台阿里巴巴 0

      路过帮顶