PHP获取文件大小

今天码PHP的时候碰到一个很蛋疼的问题,我在做文件床路由模块的时候测试用php输出文件下载,但是很大的文件永远下载不完整,浏览器只会下几百M然后就结束了。

于是我开始从文件输出部分开始一步步往回推,到最后发现原来是服务器告诉浏览器这个文件只有这么大,于是浏览器接收了这么多字节后就关闭连接了。

接着我就开始filesize各种大小的文件,发现大于4G的文件都会出现这样的情况,于是我就去php.net逛了一下,只见这血淋淋的一幕

NoteBecause PHP’s integer type is signed and many platforms use 32bit integers, some filesystem functions may return unexpected results for files which are larger than 2GB.

注意:因为PHP的整数类型是有符号整数并且很多平台还他喵的在用32位整数,一些文件系统相关的函数作用在大于2GB文件时可能返回感天动地的结果。

我只想说————————————坑爹呢这是!你都那么多代了这个函数还不升级一下简直有病吧!

虽然它说2GB以上会有问题,不过我测试2GB多文件的时候不知为什么没问题,不过4GB以上的文件就变几百M了。

再于是我就接着在刚刚的页面往下翻,看到了各种各样解决大文件的贡献代码,有一个是这么写的

我测试了一下好像没起作用,而且调用一个外部模块好像开销有点大,于是我把这个函数改了一下

这样就可以正确获取文件大小了,只不过这么做在windows下如果目录里文件很多的话好像也有点废资源,不过大多数服务器还是跑在linux上吧눈_눈,凑活一下能用就好了。。。





如文中无特殊说明,本站均使用以下协议:知识共享许可协议
知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

本博客使用Disqus评论系统,如果看不到评论框,请尝试爬墙。