通过(f|v|s)scanf函数读取PHP_INT_MAX或接近值


Reading PHP_INT_MAX or near value by (f|v|s)scanf functions

我正在运行64位Ubuntu Linux。php也是64位的。我正在尝试使用fscanf从文件中读取整数。fscanf似乎无法扫描超过32位的整数。请参阅下面的演示。

var_dump(
    $a = PHP_INT_MAX, 
    --$a, 
    (string)$a, 
    sscanf((string)$a, "%u"), 
    PHP_INT_SIZE
);

输出

int(9223372036854775807)
int(9223372036854775806)
string(19) "9223372036854775806"
array(1) {
  [0]=>
  string(10) "4294967294"
}
int(8)

看,64位整数运算有效!只是sscanf函数不起作用。可能是我缺少一个正确的格式
如何使用scanf在PHP中读取64位整数?格式是什么?

答案是您需要将PHP版本升级到更现代的版本。看起来5.2有这个问题,但它在5.3 中得到了修复

所以升级你的PHP版本,你应该很好地去。。。(这还不算5.2在一段时间内是EOL)。。。