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

166

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 и его авторы (Омар Килани, Скотт МакВикар).

MirroredFate
источник
4
Проверьте disable_functionsдирективу ini, чтобы увидеть, есть ли json_decodeв этом списке
Orangepill
Модуль json обнаруживается в вашем выводе phpinfo ()?
tcmitche
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_ge\ t_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MirroredFate
Ubuntu 12.04 имеет пакет: php-services-json. Может быть, это помогает ...
JGB
1
@jgb Это пакет PEAR Services_Json. Который также охватывает, немного разбирает Javascript, а не только JSON. Но есть и другие реализации пользовательского интерфейса, которые непосредственно реализуются json_decode.
Марио

Ответы:

355

Используете 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

jszobody
источник
Я вернулся, чтобы упомянуть, что кажется, что все в 5.5.0порядке JSON, это только, 5.5.1что ломается.
MirroredFate
2
У 5.5.3 его тоже нет (Ubuntu 13.10)
Луис Лобо Боробия
9
Не забудьте перезапустить apache после установки модуля json с помощью упомянутой команды Криса.
Павел
1
Если бы php-json был зависимостью от php-common, все бы исчезло ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... пожалуйста, проголосуйте, если это было проблемой для вас.
rickfoosusa
20
Кто-нибудь находит по иронии судьбы «зло», что это исключение из лицензии на ПО стоило мне одного часа исследований?
recursion.ninja
13

С Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
Дэвид
источник
Как насчет apt-get install php7.2-json 7.2. Я попробовал это, но все еще не работает. Дай мне ошибку в приложении Laravel php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Смит Патель
8

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

apt-get install php5-json
service apache2 restart

Источник

Мильковский
источник
Если перезапуск не может устранить ошибку, завершите процессы apache2 и запустите: sudo pkill apache2; сервис apache2 start
xilef
3

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

phpbrew ext install json
yesnik
источник
2

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

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

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

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

Rafy
источник
1

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

NicoMinsk
источник
0

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

В наши дни довольно распространено использовать инструменты jzzle в качестве библиотеки в приложениях 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

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

CENTOS

Место действия

Я установил PHP в Centos Docker, это мой DockerFile:

FROM centos:7.6.1810

LABEL maintainer="teran.a.joan@gmail.com"

RUN yum install httpd-2.4.6-88.el7.centos -y
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN yum install php72w -y
ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Приложение вернуло ту же ошибку с json_decode и json_encode

разрешение

Установите PHP Common, который имеет json_encode и json_decode

yum install -y php72w-common-7.2.14-1.w7.x86_64

Как найти разрешение?

У меня есть другой файл Docker, который собирает контейнер для API, и он имеет порядок установки клиента php-mysql:

yum install php72w-mysql.x86_64 -y

Если я использую эти изображения для монтирования приложения, json_encode и json_decode работают !! Хорошо ..... Какие зависимости это имеет?

[root@c023b46b720c etc]# yum install php72w-mysql.x86_64
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.gtdinternet.com
 * epel: mirror.globo.com
 * extras: linorg.usp.br
 * updates: mirror.gtdinternet.com
 * webtatic: us-east.repo.webtatic.com
Resolving Dependencies
--> Running transaction check
---> Package php72w-mysql.x86_64 0:7.2.14-1.w7 will be installed
--> Processing Dependency: php72w-pdo(x86-64) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Running transaction check
---> Package mariadb-libs.x86_64 1:5.5.60-1.el7_5 will be installed
---> Package php72w-pdo.x86_64 0:7.2.14-1.w7 will be installed
--> Processing Dependency: php72w-common(x86-64) = 7.2.14-1.w7 for package: php72w-pdo-7.2.14-1.w7.x86_64
--> Running transaction check
---> Package php72w-common.x86_64 0:7.2.14-1.w7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package                   Arch               Version                        Repository            Size
========================================================================================================
Installing:
 php72w-mysql              x86_64             7.2.14-1.w7                    webtatic              82 k
Installing for dependencies:
 mariadb-libs              x86_64             1:5.5.60-1.el7_5               base                 758 k
 php72w-common             x86_64             7.2.14-1.w7                    webtatic             1.3 M
 php72w-pdo                x86_64             7.2.14-1.w7                    webtatic              89 k

Transaction Summary
========================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 2.2 M
Installed size: 17 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): mariadb-libs-5.5.60-1.el7_5.x86_64.rpm                                    | 758 kB  00:00:00     
(2/4): php72w-mysql-7.2.14-1.w7.x86_64.rpm                                       |  82 kB  00:00:01     
(3/4): php72w-pdo-7.2.14-1.w7.x86_64.rpm                                         |  89 kB  00:00:01     
(4/4): php72w-common-7.2.14-1.w7.x86_64.rpm                                      | 1.3 MB  00:00:06     
--------------------------------------------------------------------------------------------------------
Total                                                                   336 kB/s | 2.2 MB  00:00:06     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                 1/4 
  Installing : php72w-common-7.2.14-1.w7.x86_64                                                     2/4 
  Installing : php72w-pdo-7.2.14-1.w7.x86_64                                                        3/4 
  Installing : php72w-mysql-7.2.14-1.w7.x86_64                                                      4/4 
  Verifying  : php72w-common-7.2.14-1.w7.x86_64                                                     1/4 
  Verifying  : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                 2/4 
  Verifying  : php72w-pdo-7.2.14-1.w7.x86_64                                                        3/4 
  Verifying  : php72w-mysql-7.2.14-1.w7.x86_64                                                      4/4 

Installed:
  php72w-mysql.x86_64 0:7.2.14-1.w7                                                                     

Dependency Installed:
  mariadb-libs.x86_64 1:5.5.60-1.el7_5                php72w-common.x86_64 0:7.2.14-1.w7               
  php72w-pdo.x86_64 0:7.2.14-1.w7                    

Complete!

Да! Внутри зависимостей есть общие пакеты. Я установил его в другой контейнер, и он работает! После того, как я поместил директиву de в DockerFile, Git commit !! Git Tag !!!! Git Push !!!! Готов!

Джоан Теран
источник