【问题标题】:PHP Cassandra Timeuuid constructor hits Integer Limit (32bit)PHP Cassandra Timeuuid 构造函数达到整数限制(32 位)
【发布时间】:2018-07-30 11:38:40
【问题描述】:

我在我的项目中使用 cassandra timeuuid。但由于整数限制,无法创建 timeuuid。

$time = time();

$tS = new Cassandra\Timeuuid($time);
echo("Time Stamp : " . $time       . "</br>");
echo("Time UUID  : " . $tS         . "</br>");
echo("UUID TS    : " . $tS->time() . "</br>");

如果我运行上面的代码,我会得到以下结果。

Time Stamp : 1519110425
Time UUID : 07e0a090-2ba3-11b2-a264-4f5a3b4facaa
UUID TS : 1519110

这意味着 Timeuuid 构造函数需要以毫秒为单位的时间戳。但是,如果我尝试以毫秒为单位传递参数,它将达到我的 php(32 位)的整数限制。

$time = time();

$tS = new Cassandra\Timeuuid($time * 1000);
echo("Time Stamp : " . $time       . "</br>");
echo("Time UUID  : " . $tS         . "</br>");
echo("UUID TS    : " . $tS->time() . "</br>");

上述代码出现以下错误。

Fatal error: Uncaught Cassandra\Exception\InvalidArgumentException: Invalid argument - integer or string expected in testFile.php:9 Stack trace: #0 testFile.php(9): Cassandra\Timeuuid->__construct(1519110640000) #1 {main} thrown in testFile.php on line 9

由于它高于整数限制,它被强制转换为浮点数。

知道如何解决这个问题吗?

【问题讨论】:

    标签: php cassandra datastax timeuuid datastax-php-driver


    【解决方案1】:

    Cassandra\Timeuuid 应该接收从 time 函数获得的整数的 documentation states。查看驱动程序的源代码,它看起来确实需要以秒为单位的值,然后所有乘法都发生在 C++ 驱动程序中。

    对我来说,这看起来像是驱动程序中的错误,所以请针对它提出问题at JIRA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-04
      • 2011-07-18
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多