PHP Неустранимая ошибка: вызов неопределенной функции json_decode ()

Apache регистрирует PHP Fatal error: Call to undefined function json_decode() . После некоторых поисковых запросов, похоже, эта проблема возникает из-за отсутствия последней версии php. Как ни странно, запуск php --version -version

 PHP 5.5.1-2+debphp.org~precise+2 (cli) (built: Aug 6 2013 10:49:43) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.2-dev, Copyright (c) 1999-2013, by Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans 

Очевидно, что моя версия php больше 5.1 .

Любые идеи относительно того, что может вызвать это, или шаги, которые нужно предпринять, чтобы узнать?

EDIT: результат сценария, эхо-ответа phpversion, равен 5.5.1-2+debphp.org~precise

EDIT: результат phpinfo() также PHP Version 5.5.1-2+debphp.org~precise+2

Кроме того, в phpinfo() он перечисляет модуль JSON и авторов модуля (Омар Килани, Скотт Маквикар).

Использование Ubuntu?

Короткий ответ:

 sudo apt-get install php5-json 

Затем, конечно, убедитесь, что вы перезапустите Apache :

 sudo service apache2 restart 

Или если вы используете PHP-FPM:

 sudo service php5-fpm restart 

объяснение

Debian удалил предыдущее расширение JSON с PHP 5.5rc2 из-за конфликта лицензий.

В лицензии JSON есть пункт, который гласит:

Программное обеспечение должно использоваться для Добра, а не Зла.

Это создает проблему с определением свободного программного обеспечения Free Software Foundation, в котором говорится:

Свобода запуска программы для любых целей (свобода 0).

FSF продолжает конкретно перечислять лицензию JSON как несвободную .

Да, это кажется немного глупым. Тем не менее Debian удалил несовместимое расширение JSON и вместо этого предложил заменяющее расширение , которое функционально эквивалентно.

Чтобы быть ясным: сам PHP НЕ удалил JSON, он все еще находится в мастер . Это проблема с дистрибутивом / пакетом.

Расмус делает это довольно ясно :

Мы не удалили json, и мы никогда не выпустим версию php без встроенной поддержки json. Любые изменения в 5.5 происходят из-за любой дистрибутивной упаковки, которую вы используете, и мы не контролируем ее.

Подробнее

http://iteration99.com/2013/php-json-licensing-and-php-5-5/

http://liorkaplan.wordpress.com/2013/06/01/bye-bye-non-free-php-json-extension/

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

http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support

С Ubuntu:

 sudo apt-get install php5-json sudo service php5-fpm restart 

Решение для пользователей LAMP:

 apt-get install php5-json service apache2 restart 

Источник

Модуль был установлен, но символическая ссылка не была в /etc/php5/cli/conf.d

Та же проблема с 7.1

apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini

  • Добавьте json.so в новый файл
  • Добавьте соответствующую символическую ссылку в conf.d
  • Перезапустите службу apache2 (при необходимости)

Если вы используете phpbrew, попробуйте установить расширение json для исправления ошибки с неопределенной функцией json_decode () :

 phpbrew ext install json 

У меня такой же вопрос: PHP Fatal error: Call to undefined function json_decode() , но я запускаю php под cygwin в Windows. Когда я запускаю php -m , я обнаружил, что модуль json не установлен. Поэтому я снова запускаю cygwin setup.exe, проверяю пакет json из интерфейса конфигурации, и проблема решена.

вы также можете уклониться от основного модуля PHP.

В наши дни довольно часто использовать инструменты guzzle json в качестве библиотеки в приложениях PHP. Если ваше приложение является композиторским приложением, тривиально включать их в состав сборника композитора. Инструмент жужжания, как библиотека, будет заменой «под ключ» для инструмента json, если вы скажете PHP, чтобы он автоматически включал этот инструмент.

http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#

http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html