Erro fatal do PHP: Chamada para a função indefinida json_decode ()


165

O Apache está registrando PHP Fatal error: Call to undefined function json_decode(). Depois de pesquisar no Google, parece que esse problema é resultado de não ter a versão mais recente do php. Estranhamente, executando php --versionsaídas

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

Mostrando claramente que minha phpversão é maior que 5.1.

Alguma idéia do que poderia causar isso ou as etapas a serem seguidas para descobrir?

EDIT: O resultado de um script ecoando phpversion é 5.5.1-2+debphp.org~precise

EDIT: O resultado de phpinfo()também éPHP Version 5.5.1-2+debphp.org~precise+2

Além disso, no phpinfo(), lista o módulo JSON e os autores do módulo (Omar Kilani, Scott MacVicar).


4
Verifique a disable_functionsdirectiva ini para ver se json_decodeestá nessa lista
— Orangepill

O módulo json aparece na sua saída 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 tem um pacote: php-services-json. Talvez isso ajude ...
— JGB

1
@jgb Esse é o pacote PEAR Services_Json. O que também é bastante abrangente, analisa um pouco o Javascript, e não apenas o JSON. Mas existem outras implementações de terra de usuário que reimplementam diretamente json_decode.
— mario

Respostas:


354

Usando o Ubuntu?

Resposta curta:

sudo apt-get install php7.2-json

(ou php7.1-jsonou php5-jsondependendo da versão do PHP que você está executando)

Então, é claro, certifique-se de reiniciar o Apache :

sudo service apache2 restart

Ou se você estiver usando PHP-FPM:

sudo service php7.2-fpm restart

(Or php7.1-fpmor php5-fpm)

Explicação

O Debian removeu a extensão JSON anterior a partir do PHP 5.5rc2 devido a um conflito de licença.

A licença JSON possui uma cláusula que afirma:

O Software deve ser usado para o Bem, não para o Mal.

Isso causa um problema com a definição de software livre da Free Software Foundation que declara:

A liberdade de executar o programa, para qualquer finalidade (liberdade 0).

A FSF continua listando especificamente a licença JSON como não livre .

Sim, parece um pouco bobo. No entanto, o Debian removeu a extensão JSON não compatível e, em vez disso, ofereceu uma extensão de substituição que é funcionalmente equivalente.

Para ser claro: o próprio PHP NÃO removeu o JSON, ainda está no master . Este é um problema de distribuição / gerenciamento de pacotes.

Rasmus deixa bem claro :

Nós não removemos o json e nunca lançaremos uma versão do php sem o suporte ao json incorporado. Quaisquer alterações no 5.5 são devidas a qualquer pacote de distribuição que você esteja usando e sobre o qual não tenhamos controle.

Mais detalhes

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


Voltei a mencionar que parece que 5.5.0está tudo bem JSON, é só 5.5.1isso que quebra.
— MirroredFate

2
5.5.3 não tem nem (Ubuntu 13.10)
— Luis Lobo Borobia

9
Não esqueça de reiniciar o apache após instalar o módulo json com o comando mencionado por Chris.
— Pavel

1
Se o php-json fosse uma dependência do php-common, tudo isso desapareceria ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... vote se isso foi um problema para você.
— Rickfoosusa

20
Alguém acha ironicamente "mau" que essa exclusão de licenciamento de software me custe uma hora de tempo de pesquisa?
— Recursion.ninja

13

Com o Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart

E quanto apt-get install php7.2-json ao 7.2. Eu tentei isso, mas ainda não está funcionando. Dando-me erro no aplicativo laravel php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
— Smit Patel

8

Solução para usuários LAMP:

apt-get install php5-json
service apache2 restart

Fonte


Se uma reinicialização falhar na solução do erro, mate os processos apache2 e inicie: sudo pkill apache2; serviço apache2 start
— xilef 24/10

3

Se você estiver usando o phpbrew, tente instalar a extensão json para corrigir erros com a função indefinida json_decode () :

phpbrew ext install json

2

O mesmo problema com o 7.1

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

  • Adicione json.so ao novo arquivo
  • Adicione o link sym apropriado em conf.d
  • Reinicie o serviço apache2 (se necessário)

2

Eu tenho a mesma pergunta PHP Fatal error: Call to undefined function json_decode():, mas eu corro o php sob o cygwin no Windows. Quando executo php -m, descobri que não há nenhum módulo json instalado. Então, eu executo o cygwin setup.exe novamente, verifique o pacote json na interface de configuração e o problema foi resolvido.


1

O módulo foi instalado, mas o link simbólico não estava em /etc/php5/cli/conf.d


0

você também pode evitar completamente o módulo PHP principal.

É bastante comum usar as ferramentas guzzle json como uma biblioteca em aplicativos PHP atualmente. Se o seu aplicativo for um compositor, é trivial incluí-lo como parte de uma compilação do compositor. A ferramenta guzzle, como uma biblioteca, seria uma substituição turnkey para a ferramenta json, se você disser ao PHP para incluir automaticamente a ferramenta.

http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#

http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html


O json_decode do Guzzle está usando o json_decode do php com verificação de erro adicional, portanto sua resposta é inválida
— emix

0

CENTOS

Cena

Eu instalei o PHP no Centos Docker, este é o meu 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"]

O aplicativo retornou o mesmo erro com json_decode e json_encode

Resolução

Instale o PHP Common que possui json_encode e json_decode

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

Como encontrar a resolução?

Eu tenho outro arquivo Docker que constrói o contêiner para a API e ele tem a ordem para instalar o cliente php-mysql:

yum install php72w-mysql.x86_64 -y

Se eu usar essas imagens para montar o aplicativo, o json_encode e o json_decode funcionam !! Ok ..... Que dependências isso tem?

[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!

Sim! Dentro das dependências estão os pacotes comuns. Eu instalei no meu outro contêiner e funciona! Depois, coloquei a diretiva no DockerFile, Git commit !! Git Tag !!!! Git Push !!!! Pronto!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.