32位PHP处理超大文件大小的精准方案

这是一种快速实现的方案, 用于确定在 32 位的 PHP 环境中, 那些超过了 2GB 大小的庞大文件的真实容量。

($fp)

$pos = 0;

$size = ;

fseek($fp, 0, );

while ($size > 1)

fseek(fp, size, );

if (fgetc($fp) === false)

fseek(fp, -size, );

将变量size的值除以2, 然后将结果强制转换为整数类型并重新赋值给变量size。

else

fseek($fp, -1, );

pos += size;

while (fgetc(fp) !== false) pos++;

$pos;

那个输入的东西,是一个已经打开的文件句柄。返回回来的值, 它是这个文件大小的小于等于四十亿字节的大小时的一个整数。如果说它超过了那个限度, 返回的值就变成一个浮点数了。

这个函数首先跳过大概1GB的数据, 读取一个字符, 然后重复此操作。当进入最后一个GB时, 只要读取失败, 它就会将大小减半。最后几个字节只是被读取进来。

有部分人士对于这个函数的存在持有关切态度, 原因是当 $pos 的数值超越了整数能够表示的范围之后, 该变量就会转换为浮点数类型, 而许多人都清楚浮点数在进行运算时容易产生不精确的问题。

然而, 在绝大多数正确地遵循了 ieee 浮点数规范的那类计算机设备上, $pos 这个变量的精度可以达到大约 pb(拍字节)这么多。

除非您正在处理的文件其规模达到了多 (拍字节)之大, 或者您的代码执行环境是非常稀奇古怪的硬件平台, 否则说此函数所能提供的功能是绰绰有余的, 完全能够满足使用需求。这个函数的每一个部分都在设计的时候经过了精心的考量, 这样做的目的是为了解决在32位环境下所出现的漏洞和不足之处。

相关推荐
\光辉岁月/6 小时前
2.java变量
java·开发语言·变量
全栈弄潮儿²⁰²⁴7 天前
Python实战第2期: 变量与数据类型
python·变量·数据类型·python实战
Irene199116 天前
ORA-00972: identifier is too long 关于 Oracle 30 字节标识符上限
字节
xcLeigh2 个月前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
SL-staff3 个月前
(十六)「JVS-Rules规则引擎 V2.5」— 结束节点
变量·规则引擎·业务系统·jvs·jvs规则引擎·结束节点·规则设计
Bytenerd_03 个月前
【中级软件设计师】计算机基本单位与进制转换 (附软考真题)
进制·中级软件设计师·软考真题·字节·十进制·计算机基本单位·位
聆风吟º4 个月前
【Python编程日志】Python基础语法:常量 | 表达式 | 变量
开发语言·python·变量·常量·表达式
淼淼爱喝水4 个月前
Ansible 入门实战:四种变量优先级比较实验
ansible·变量
BestOrNothing_20154 个月前
C++零基础到工程实战(5.1):初识函数—定义调用、参数返回值、栈区内存与变量作用域分析
c++·生命周期·作用域·变量·函数·栈内存