使用Homestead,我尝试从the PHP docs运行BIGINT示例#5,我得到一个“整数溢出通知”。标志JSON_BIGINT_AS_STRING
被忽略,结果无效(最大值为9223372036854775807)。
Homestead实例具有以下软件堆栈:
然后我在3v4l和it works上测试了它。我不知道他们的JSON设置。
然后我在OS X的预装PHP上测试了它,它是:
这也有效 - 就像在文档中一样。
随后,我发现this issue导致this commit,这似乎是造成问题的原因,但为什么Remi会使> 64位数无效并调用整数溢出,尽管默认的JSON扩展(本地出现在3v4l和OS X上)没有这样做?这是否违反了声称它是“替代品”?在当前状态下,此扩展(默认情况下包含在许多安装中)直接针对PHP的官方文档。
是否有任何好的解决方案,不需要内部更改所使用的库,如Guzzle?
编辑:在进一步搜索后,我发现this确认一位开发人员的意见是造成问题的原因。
答案 0 :(得分:2)
是的,这真的只是雷米斯的观点。这样,它显然不是100%的直接替代品。你问为什么允许它?因为没有人可以禁止自由开发者以他想要的方式编写自己的代码。
所以......你所能做的就是自己抱怨和编译ext / json(而不是使用JSON-C)。
这意味着从php-src源(https://github.com/php/php-src)克隆,签出PHP-5.6分支,导航到ext / json目录并通过phpize && ./configure && make install
进行编译。然后将该扩展名添加到php.ini而不是json-c扩展名。 [如有必要,您可能需要先安装一些编译工具......]
请注意,在PHP 7.0中,json扩展名被新的实现替换(请参阅RFC:https://wiki.php.net/rfc/jsond),它没有这些问题,并且没有许可证问题。