【问题标题】:PHP long integers for thrift用于节俭的 PHP 长整数
【发布时间】:2012-07-11 04:21:51
【问题描述】:

我的 Thrift 服务期望接收一个表示时间戳的长整数(以毫秒为单位),但来自 PHP,我知道 PHP thrift 应该自动将我的 PHP 类型转换为 thrift 类型,但它期望哪种 PHP 类型用于长整数?我认为我的计算机是 64 位的,但由于我认为 PHP 整数的长度取决于平台,所以我真的不想依赖平台相关的长度来处理我的整数。

我目前正在获取 microtime() 并乘以 1000,然后转换为整数。这是使用 PHP 和节俭长整数的“正确”方式吗?

【问题讨论】:

  • 不完全是我的问题。 Thrift 神奇地将类型转换为 thrift 类型,但我不知道它愿意转换哪些类型。正如我所说,我真的不想指望我拥有 64 位架构。
  • 为什么必须是整数?字符串有什么问题?你是如何与thrift沟通的?通过 HTTP 或者是否有一些 PHP 扩展可以让您通过其他协议与其通信(我不知道 Thrift 是什么,谷歌产生 Apache Thrift)?如果你所要做的只是传递一个 PHP 与它没有任何关系的数字,我认为没有理由在 PHP 中强制使用类型。
  • 是的,apache thrift [thrift.apache.org/] 我正在做的工作需要长整数有几个原因——其中一个原因是我们通过生成随机长整数来获得概率唯一性,这要少得多可能是唯一的,数量较少。长话短说,我需要在 php 中有长整数。另外,接口是别人定义的,不能只用字符串。

标签: php long-integer thrift


【解决方案1】:

你是对的,

整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。 64 位平台的最大值通常约为 9E18。 PHP 不支持无符号整数。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。

http://www.php.net/manual/en/language.types.integer.php

如果您使用microtime(),则无需将其除以 1000。它是浮点数,您可能需要将其乘以 1000。

您可以使用BC Math 将其计算为数字,使用字符串类型。我猜字符串可以与其他任何东西通信。

如果乘以 1000,你甚至不需要BCMath。只需从microtime(true) 的字符串表示中删除逗号(或microtime 中的空格)

【讨论】:

  • 好电话,我乘以 1000,我已更改我的问题以反映这一点。
  • 我想给你赏金,但你的回答似乎并没有解决我与 Thrift 相关的问题。你知道 php thrift 如何期望长整数工作吗?
  • @nnythm,抱歉,我无法添加任何内容
【解决方案2】:

也许您应该使用字符串类型的 id,例如 twitter:https://dev.twitter.com/docs/twitter-ids-json-and-snowflake

【讨论】:

  • 我正在连接一个使用 thrift longs 的 twitter 服务。我可以更改它,但我还必须更改所有与它挂钩的 twitter 代码,这会很痛苦。
猜你喜欢
  • 2015-10-18
  • 2017-12-31
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多