PHP фатальная ошибка: вызов неопределенной функции JSON decode()
Apache ведет журнал PHP Fatal error: Call to undefined function json_decode(). После некоторого googling, похоже, эта проблема является результатом отсутствия последней версии 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.
любые идеи относительно того, что может вызвать это, или шаги, которые необходимо предпринять, чтобы выяснить?
EDIT: результат скрипта эхом phpversion является 5.5.1-2+debphp.org~precise
редактировать: результат phpinfo() тоже PHP Version 5.5.1-2+debphp.org~precise+2
кроме того, в phpinfo(), в нем перечислены модуль JSON и авторы модуля (Омар Килани, Скотт Маквикар).
8 ответов:
С Помощью 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 из-за к конфликту лицензий.
The лицензия JSON имеет предложение, которое гласит:
программное обеспечение должно использоваться для добра, а не зла.
это вызывает проблему с определение свободного программного обеспечения Фонда свободного программного обеспечения в которой говорится:
свобода запуска программы, для любых целей (свобода 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
та же проблема с 7.1
apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini
- добавить json.so в новый файл
- добавьте соответствующую ссылку sym в разделе 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-приложениях. Если ваше приложение является приложением composer, тривиально включать их в состав сборки composer. Инструмент 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
Comments