- PVSM.RU - https://www.pvsm.ru -

PHP JSON был удален из PHP 5.5?

Возможно некоторые из Вас обновив php до версии 5.5 на своих Linux машинах, обнаружили добрую часть своих приложений неработающими по причине фатальной ошибки похожей на эту:

PHP Fatal error: Call to undefined function json_encode()

Почему так произошло читайте в вольном переводе cтати «Has PHP JSON been removed in PHP 5.5?»,
под катом.

Что происходит?

Крокфордский (Douglas Crockford [1]) JSON — широко используемый формат обмена данными, оказался в лицензионном конфликте с PHP в Linux дистрибутивах из за строки в лицензионном соглашении первого, которая гласит:

“The Software shall be used for Good, not Evil.”

В этом лицензия JSON не сходится с свободой номер ноль от Фонда Свободного Программного Обеспечения:

“The freedom to run the program for any purpose.”
(программу можно свободно использовать с любой целью)

Хотя это может показаться незначительным, но автор json.org «вежливо» отказывается вносить поправки в лицензию. Ответом стало удаление стандартного PHP расширение JSON в PHP 5.5rc2 в Debian, Fedora, и других дистрибутивах.

До тех пор пока менеджер пакетов вашего Linux дистрибутива не начнет предоставлять json расширение в виде пакета, json-функции могут быть недоступны. Любой код использующий эти стандартные функции приведет к ошибкам:

PHP Fatal error: Call to undefined function json_encode()
PHP Fatal error: Call to undefined function json_decode()

(прим. переводчика: в ubuntu server 13.10 PHP 5.5.3-1ubuntu2 расширение JSON идет отдельным пакетом php5-json)

Решение для тех кого это затронуло

JSON в PHP будет предоставлен другими расширениями в свое время и будем надеяться это будет прозрачно для конечного пользователя, но если вы не хотите ждать с обновлением и вас затронула эта проблема, вы можете установить PECL расширение JSON-C от Реми (jsonc by Remi Collet) которое использует библиотеку json-c.

Мое решение для CentOS 5.9 было в установке PECL JSON-C расширения из репозитория Реми для YUM:

yum --enablerepo=remi install php-pecl-jsonc

Для Дебиан дистрибутивов может оказаться полезным сторонний репозиторий от Ondřej (прим. переводчика: полагаю речь идет об этом [2])

Если вы установили расширение вручную, не забудьте добавить его в php.ini

Ссылки:
bugs.php.net/bug.php?id=63520 [3]
github.com/remicollet/pecl-json-c [4]

Оригинал статьи [5]

www.json.org/license.html [6]
www.gnu.org/philosophy/free-sw.html [7]

От переводчика

Статья датирована девятым августа и не совсем уже актуальна (для свежей убунту например, есть пакет php5-json). Я решил опубликовать этот перевод по двум причинам:

  1. Хочу уведомить тех кого это касается, чтобы не было как у меня. Проапгрейдив свой сервер до Ubuntu 13.10 потратил некоторое время на поиски причины слета части функционала и поиск решения;
  2. Сам повод удаления json из php мне показалась весьма… Интересным, если так можно выразиться. И повод для удаления и факт существования вышеозначенной строки в лицензии на json.org;

Автор: FrEEz10

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/46131

Ссылки в тексте:

[1] Douglas Crockford: http://en.wikipedia.org/wiki/Douglas_Crockford

[2] этом: https://launchpad.net/~ondrej

[3] bugs.php.net/bug.php?id=63520: https://bugs.php.net/bug.php?id=63520

[4] github.com/remicollet/pecl-json-c: https://github.com/remicollet/pecl-json-c

[5] Оригинал статьи: http://iteration99.com/2013/php-json-removed-from-php-5-5/

[6] www.json.org/license.html: http://www.json.org/license.html

[7] www.gnu.org/philosophy/free-sw.html: http://www.gnu.org/philosophy/free-sw.html

[8] Источник: http://habrahabr.ru/post/198312/