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 --version
saí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 php
versã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).
disable_functions
directiva ini para ver sejson_decode
está nessa listadisable_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,
php-services-json
. Talvez isso ajude ...json_decode
.Respostas:
Usando o Ubuntu?
Resposta curta:
(ou
php7.1-json
ouphp5-json
dependendo da versão do PHP que você está executando)Então, é claro, certifique-se de reiniciar o Apache :
Ou se você estiver usando PHP-FPM:
(Or
php7.1-fpm
orphp5-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:
Isso causa um problema com a definição de software livre da Free Software Foundation que declara:
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 :
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
fonte
5.5.0
está tudo bemJSON
, é só5.5.1
isso que quebra.Com o Ubuntu:
fonte
apt-get install php7.2-json
ao 7.2. Eu tentei isso, mas ainda não está funcionando. Dando-me erro no aplicativo laravelphp RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Solução para usuários LAMP:
Fonte
fonte
Se você estiver usando o phpbrew, tente instalar a extensão json para corrigir erros com a função indefinida json_decode () :
fonte
O mesmo problema com o 7.1
apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini
fonte
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 executophp -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.fonte
O módulo foi instalado, mas o link simbólico não estava em /etc/php5/cli/conf.d
fonte
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
fonte
Eu instalei o PHP no Centos Docker, este é o meu DockerFile:
O aplicativo retornou o mesmo erro com json_decode e json_encode
Instale o PHP Common que possui json_encode e json_decode
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:
Se eu usar essas imagens para montar o aplicativo, o json_encode e o json_decode funcionam !! Ok ..... Que dependências isso tem?
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!
fonte