【问题标题】:Reading PHP_INT_MAX or near value by (f|v|s)scanf functions通过 (f|v|s)scanf 函数读取 PHP_INT_MAX 或接近值
【发布时间】:2024-05-21 10:20:02
【问题描述】:

我正在运行 64 位 Ubuntu Linux。 也是 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 php linux 64-bit integer scanf


【解决方案1】:

答案是您需要将您的 PHP 版本升级到更现代的版本。貌似是5.2 has this issue,但是在5.3里面是固定的

所以升级你的 PHP 版本,你应该很高兴......(这还不包括 5.2 现在 EOL 有一段时间了)......

【讨论】:

  • 我正在使用PHP 5.3.2-1ubuntu4.14。为什么会显示这样的错误?
  • 从 5.3.2 升级到 5.3 的最新版本... 近 2 年前修复。从日期来看,5.3.3 应该有修复...