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

140

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

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.

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

ИЗМЕНИТЬ: Результат эхо-рефлексии script равен 5.5.1-2+debphp.org~precise

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

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

  • 3
    Проверьте директиву ini disable_functions чтобы увидеть, есть ли в этом списке json_decode
  • 0
    Модуль json обнаруживается в вашем выводе phpinfo ()?
Показать ещё 3 комментария
Теги:

8 ответов

349
Лучший ответ

Использование 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 есть пункт, который гласит:

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

Это вызывает проблему со свободным программным обеспечением 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

  • 0
    Я вернулся, чтобы упомянуть, что кажется, что 5.5.0 хорошо с JSON , это только 5.5.1 который ломается.
  • 2
    У 5.5.3 его тоже нет (Ubuntu 13.10)
Показать ещё 9 комментариев
14

С Ubuntu:

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

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

apt-get install php5-json
service apache2 restart

Источник

  • 0
    Если перезапуск не может устранить ошибку, завершите процессы apache2 и запустите: sudo pkill apache2; запуск сервиса apache2
1

вы также можете отказаться от основного 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

  • 0
    Json_decode от Guzzle использует php json_decode с дополнительной проверкой ошибок, поэтому ваш ответ неверен
1

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

phpbrew ext install json
1

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

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

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

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню