Pull to refresh

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

Reading time 2 min
Views 83K
Original author: Iteration 99
Возможно некоторые из Вас обновив 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) 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 (прим. переводчика: полагаю речь идет об этом)

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

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

Оригинал статьи

www.json.org/license.html
www.gnu.org/philosophy/free-sw.html

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

Статья датирована девятым августа и не совсем уже актуальна (для свежей убунту например, есть пакет php5-json). Я решил опубликовать этот перевод по двум причинам:
  1. Хочу уведомить тех кого это касается, чтобы не было как у меня. Проапгрейдив свой сервер до Ubuntu 13.10 потратил некоторое время на поиски причины слета части функционала и поиск решения;
  2. Сам повод удаления json из php мне показалась весьма… Интересным, если так можно выразиться. И повод для удаления и факт существования вышеозначенной строки в лицензии на json.org;
Tags:
Hubs:
+124
Comments 105
Comments Comments 105

Articles