Joh*_*ohn 7 php performance internal 32bit-64bit windows-7
我正在运行Windows 7 - 64位,最新的XAMPP版本具有32位PHP版本.
在测试http://php.net/manual/en/function.fseek.php#112647上 有一个非常大的文件(大于PHP_MAX_INT 2147483647)时,我现在很确定,连续跟随fseeks在执行之前总结一下在filepointer上.
我有两个问题:
我可以用合理的方法解决这个总结(或者只用上面链接中提到的解决方法)吗?
这种聚合是在PHP中发生的(我假设,虽然我不知道在PHP中的哪个位置)或在Windows 7中?
回答自己:尝试使用多次搜索的两种解决方法对我的系统无效.相反,他们将文件指针放在PHP_MAX_INT下的不同位置.(32位PHP只能搜索到PHP_MAX_INT + 8192.从那里读取仍然是可能的,但我不知道到底有多远.)
因此,对于我的具体情况,这个问题已经过时,因为32位PHP只能访问PHP_MAX_INT + 8192,无论你做什么.我留下这个问题,因为有两个人投了票,可能对一般答案感兴趣.
我在这里提交了一个错误报告:
https://bugs.php.net/bug.php?
id = 69213结果:使用64位PHP构建它可能有用,但我没有尝试.
小智 1
事实并非如此。它实际上做了一些更愚蠢的事情。这是 PHP 源代码的一个片段:
switch(whence) {
case SEEK_CUR:
offset = stream->position + offset;
whence = SEEK_SET;
break;
}
Run Code Online (Sandbox Code Playgroud)
这是 PHP 的fseek. 这里发生的情况是:如果您告诉 PHP 从当前位置进行查找,它会将其转换为从文件开头进行“等效”查找。仅当偏移量计算不溢出时才有效;如果是,那么,它offset是一个有符号整数,所以这是未定义的行为。
好吧,这是因为 PHP 在内部缓冲流,所以他们需要做一些事情。但不一定是这样。
您可能最好尝试使用一种能够真正按照您的要求执行操作的语言来完成您的工作。