Фатальна помилка PHP: виклик невизначеної функції json_decode ()


165

Apache веде лісозаготівлю PHP Fatal error: Call to undefined function json_decode(). Після деякого гуглінгу, здається, ця проблема є наслідком відсутності останньої версії 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.

Будь-які ідеї щодо того, що це може спричинити, або кроки, які слід вжити, щоб з’ясувати це?

EDIT: Результатом скрипту, що лунає phpversion, є 5.5.1-2+debphp.org~precise

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

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


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.
Маріо

Відповіді:


354

Використовуєте 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


Я повернувся до згадки, що, схоже, 5.5.0це добре JSON, це лише 5.5.1те, що ламається.
MirroredFate

2
5.5.3 цього немає (Ubuntu 13.10)
Луїс Лобо Боробія

9
Не забудьте перезапустити apache після встановлення модуля json із вказаною командою Chris.
Павло

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
Smit Patel

8

Рішення для користувачів LAMP:

apt-get install php5-json
service apache2 restart

Джерело


Якщо перезапуск не зможе вирішити помилку, вбити процеси apache2 і запустити: sudo pkill apache2; сервіс apache2 старт
xilef

3

Якщо ви використовуєте phpbrew, спробуйте встановити розширення json, щоб виправити помилку з невизначеною функцією json_decode () :

phpbrew ext install json

2

Те саме питання з 7.1

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

  • Додайте json.so до нового файлу
  • Додайте відповідне посилання sym під конф
  • Перезапустіть послугу apache2 (за потреби)

2

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



0

ви також можете взагалі уникати основного модуля 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


Json_decode Guzzle використовує json_decode php за допомогою додаткової перевірки помилок, тому ваша відповідь недійсна
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!

Так! Всередині залежностей є загальні пакети. Я встановив його в інший контейнер, і він працює! Після цього я поклав директиву в DockerFile, Git počin !! Git Tag !!!! Git Push !!!! Готово!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.