json — код json_ и PHP: несоответствие JSON_BIGINT_AS_STRING

С помощью усадьба, Я пытаюсь запустить BIGINT пример № 5 из документы по PHP и я получаю «Уведомление о переполнении целых чисел». Флаг JSON_BIGINT_AS_STRING игнорируется, и результат является недопустимым (максимальный bigint 9223372036854775807).

Экземпляр Homestead имеет следующий программный стек:

  • PHP 5.6.9
  • JSON 1.3.6 с заголовками JSON-C и lib 0.11.99.

Затем я проверил это на 3v4l, и оно работает. Я не знаю их настройки JSON.

Затем я протестировал его на предустановленном PHP OS X, который:

  • PHP 5.5
  • JSON 1.2.1 и нет заголовков JSON-C / lib.

Это тоже работает — как в документах.

Впоследствии я нашел Эта проблема что приводит к этот коммит и, похоже, именно здесь возникают проблемы, но почему Remi делает недействительными> 64-битные числа и вызывает переполнение целых чисел, несмотря на то, что расширение JSON по умолчанию (изначально присутствует в 3v4l и OS X) этого не делает? Не противоречит ли это утверждению, что это «падение замены»? В своем текущем состоянии это расширение, которое по умолчанию включено во многие установки, идет вразрез с официальной документацией PHP.

Есть ли хорошие решения для этого, которые не требуют внутренней замены используемых библиотек, например, Guzzle?

Изменить: После поиска я нашел этот что подтверждает, что мнение одного разработчика является причиной проблем здесь.

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), который не имеет этих проблем и, кроме того, не имеет проблем с лицензией.

2

Другие решения

Других решений пока нет …