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 и авторов модуля (Омар Килани, Скотт Маквикар).
Короткий ответ:
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
Если вы используете 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