Фатальная ошибка 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 модуля и авторов модуля (Омар Килани, Скотт МакВикар).
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
С Ubuntu:
sudo apt-get install php5-json
sudo service php5-fpm 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. Если ваше приложение является приложением-композитором, то нетрудно включить их в состав сборки композитора. Инструмент 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