【问题标题】:php 64 bit with php_int_max = 2147483647php 64 位 php_int_max = 2147483647
【发布时间】:2013-07-24 02:45:09
【问题描述】:

我已经安装了具有 apache 2.4.4、mysql 5.6.12 和 php 5.4.12 的 WampServer 2.0。当我回显 PHP_INT_MAX 时,它给了我 2147483647。我也回显了 phpinfo() 并且架构指示 x64。这假设不会发生,因为我的 php 是 64 位的,对吗?我需要我的 php 支持 64 位整数。我需要我的 PHP_INT_MAX 为 9223372036854775807。

有人可以帮助我吗?谢谢

【问题讨论】:

  • long 必须在 PHP 源代码中变为 long long。然后重新编译! :) - 不知道它是否会起作用,因为它可能会破坏任何地方。我希望他们最终会采用 64 位长的表示形式。但是您对此几乎无能为力。我也希望他们能使用 Unicode……但希望渺茫。
  • 我现在不是 100% 并且太忙无法查找它,但 PHP 中的 floatsdoubles,即使在 Windows 上也是 64bit,而 floats 是 32 位的。所以你可能会尝试使用它们。
  • 现在的问题是当我执行它时我无法继续我的代码,因为我正在尝试将 dropbox 集成到我的网站中,当我使用 dropbox sdk 运行我的代码时,它有错误哪个状态我的 php 版本不支持 64 位整数,所以无法继续集成。
  • 你能发布错误信息吗?
  • 致命错误:未捕获的异常 'Exception' 带有消息 'Dropbox SDK 使用 64 位整数,但看起来我们运行的 PHP 版本不支持 64 位整数(PHP_INT_MAX=2147483647)。库:第 15 行 C:\wamp\www\dropbox-sdk\Dropbox\RequestUtil.php 中的“C:\wamp\www\dropbox-sdk\Dropbox\RequestUtil.php”'

标签: php windows int


【解决方案1】:

如果您运行的是 Windows 操作系统,wampServer 建议您使用,this is your answer

在 windows x86_64 上,PHP_INT_MAX 是 2147483647。这是因为在 底层c代码,long是32位。

请注意,这并不意味着 Windows 不支持 64 位整数:int64_t 确实存在,但 PHP AFAIK 不使用它。
我设法想出了this link,在该页面上,您可以使用一些代码来为您的代码添加对 64 位整数的支持

【讨论】:

  • 感谢您的回复。那么有没有办法解决这个问题呢?我真的不明白它告诉我如何处理你给我的链接。
  • @user2615039:there is a hacky workaround,这不需要你切换到 linux ;)
【解决方案2】:

在文件RequestUtil.php 中,它执行以下检查:

if (strlen((string) PHP_INT_MAX) < 19) {
    // Looks like we're running on a 32-bit build of PHP.  This could cause problems because some of the numbers
    // we use (file sizes, quota, etc) can be larger than 32-bit ints can handle.
    throw new \Exception("The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . ").  Library: \"" . __FILE__ . "\"");
}

您可以将其注释掉并尝试从那里破解。

如果我是你,我会使用字符串而不是整数编写自己的 Dropbox API 实现。

PS但这就是我所做的,所以我很享受:)

【讨论】:

  • 感谢您提供的替代解决方案,希望以后不会出现问题。
  • @user2615039 可能但您至少可以继续测试。始终尝试将长整数视为字符串,您可能会逃脱用它。
【解决方案3】:

试试 PHP7 - 当前的大师 http://windows.php.net/downloads/snaps/master/ 。 64 位版本现在可以利用 64 位 Windows 的所有功能。

【讨论】:

  • "PHP 7 提供完整的 64 位支持。PHP 7 的 x64 构建支持本机 64 位整数、LFS、memory_limit 等等。"所以,所有的构建,不仅是 master:windows.php.net/download
  • 是的,7.0 是发布时间的大师 :) 在 GA 之后,它现在是任何构建的 OFC。
【解决方案4】:

转到“供应商/dropbox/dropbox-sdk/lib/Dropbox”
并在 RequestUtil.php 中注释第 19-23 行。

评论此部分:

/*if (strlen((string) PHP_INT_MAX) < 19) {
    // Looks like we're running on a 32-bit build of PHP.  This could cause problems because some of the numbers
    // we use (file sizes, quota, etc) can be larger than 32-bit ints can handle.
    throw new \Exception("The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . ").  Library: \"" . __FILE__ . "\"");
}*/

就是这样。

【讨论】:

    【解决方案5】:

    我尝试了 php7 并且成功了:

    running php.exe -r "echo PHP_INT_MAX;"

    它输出9223372036854775807

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2011-06-11
      • 2018-02-20
      • 2019-01-07
      • 1970-01-01
      • 2014-12-31
      • 2010-11-02
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多