Ответ 1
Как уже упоминалось здесь, эта ошибка, похоже, исходит из ошибочной версии pecl-json-c, которая Ubuntu представляет собой псевдоним для php5-json из-за проблем с лицензированием.
Работа, которую я нашел, благодаря проекту firebase/php-jwt, заключается в проверке константы JSON_C_VERSION
, заданной pecl-json-c вместо USE_JSON_BIGINT_AS_STRING
. (Так как USE_JSON_BIGINT_AS_STRING
определен, но не реализован).
Вот код проекта JWT:
<?php
if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
/** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
* to specify that large ints (like Steam Transaction IDs) should be treated as
* strings, rather than the PHP default behaviour of converting them to floats.
*/
$obj = json_decode($input, false, 512, JSON_BIGINT_AS_STRING);
} else {
/** Not all servers will support that, however, so for older versions we must
* manually detect large ints in the JSON string and quote them (thus converting
*them to strings) before decoding, hence the preg_replace() call.
*/
$max_int_length = strlen((string) PHP_INT_MAX) - 1;
$json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
$obj = json_decode($json_without_bigints);
}