Возможно некоторые из Вас обновив 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). Я решил опубликовать этот перевод по двум причинам:
- Хочу уведомить тех кого это касается, чтобы не было как у меня. Проапгрейдив свой сервер до Ubuntu 13.10 потратил некоторое время на поиски причины слета части функционала и поиск решения;
- Сам повод удаления json из php мне показалась весьма… Интересным, если так можно выразиться. И повод для удаления и факт существования вышеозначенной строки в лицензии на json.org;
Автор: FrEEz10
Что за дебилизм…. не могут договорится, а мы страдаем…. уроды, еще пространство имен, доделали бы до конца и внедрили, а то не доработали, а нас на работе др**ат за это, мол мы же современная компания…