Фатальная ошибка PHP: Вызов неопределенной функции json decode()


Apache ведет журнал PHP Fatal error: Call to undefined function json_decode(). После некоторого поиска в Google, похоже, эта проблема является результатом отсутствия последней версии php. Как ни странно, запуск php --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.

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

РЕДАКТИРОВАТЬ: Результат сценария, повторяющего phpversion, является 5.5.1-2+debphp.org~precise

РЕДАКТИРОВАТЬ: Результат phpinfo() также PHP Version 5.5.1-2+debphp.org~precise+2

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

Author: MirroredFate, 2013-08-14

8 answers

Используя Ubuntu?

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

sudo apt-get install php7.2-json

( или php7.1-json или php5-json в зависимости от версии PHP, которую вы используете)

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

sudo service apache2 restart

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

sudo service php7.2-fpm restart

( Или php7.1-fpm или php5-fpm)

Объяснение

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

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

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

Это вызывает проблему с Определением свободного программного обеспечения Фонда свободного программного обеспечения , в котором говорится:

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

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

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

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

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

Мы не удалили 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

 334
Author: jszobody, 2018-02-13 21:03:21

С Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
 14
Author: David, 2014-03-24 19:51:02

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

apt-get install php5-json
service apache2 restart

Источник

 8
Author: milkovsky, 2014-03-11 23:32:02

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

 1
Author: NicoMinsk, 2016-07-29 11:46:30

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

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

  • Добавить json.so в новый файл
  • Добавьте соответствующую символическую ссылку в разделе conf.d
  • Перезапустить службу apache2 (при необходимости)
 1
Author: Carl Hinton, 2017-05-16 10:37:37

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

phpbrew ext install json
 1
Author: yesnik, 2017-06-23 21:51:01

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

 1
Author: Rafy, 2017-06-25 03:55:58

Вы также можете рассмотреть возможность полного отказа от основного модуля PHP.

В наши дни довольно часто инструменты guzzle json используются в качестве библиотеки в приложениях PHP. Если ваше приложение является приложением-композитором, то нетрудно включить их в состав сборки композитора. Инструмент guzzle, как библиотека, станет заменой инструмента 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

 1
Author: jaxxed, 2017-06-28 06:38:44