Apache rejestruje PHP Fatal error: Call to undefined function json_decode()
. Po pewnym googlowaniu wydaje się, że ten problem jest spowodowany brakiem najnowszej wersji php. Dziwne, uruchomione 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
Wyraźnie pokazując, że moja php
wersja jest większa niż 5.1
.
Jakieś pomysły, co może to spowodować lub kroki, które należy podjąć, aby się tego dowiedzieć?
EDYCJA: Wynik skryptu odzwierciedlającego wersję php to 5.5.1-2+debphp.org~precise
EDYCJA: Wynik phpinfo()
jest równieżPHP Version 5.5.1-2+debphp.org~precise+2
Ponadto, w phpinfo()
, zawiera listę modułu JSON i autorów modułu (Omar Kilani, Scott MacVicar).
disable_functions
dyrektywę ini, aby zobaczyć, czyjson_decode
znajduje się na tej liściedisable_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
. Może to pomoże ...json_decode
.Odpowiedzi:
Korzystasz z Ubuntu?
Krótka odpowiedź:
(lub
php7.1-json
lub wphp5-json
zależności od używanej wersji PHP)Następnie oczywiście upewnij się, że ponownie uruchomiłeś Apache :
Lub jeśli używasz PHP-FPM:
(Lub
php7.1-fpm
lubphp5-fpm
)Wyjaśnienie
Debian usunął poprzednie rozszerzenie JSON z PHP 5.5rc2 z powodu konfliktu licencji.
Licencja JSON zawiera klauzulę, która stwierdza:
Powoduje to problem z definicją wolnego oprogramowania według Free Software Foundation :
FSF szczegółowo wymienia licencję JSON jako niewolną .
Tak, wydaje się to trochę głupie. Niemniej jednak Debian usunął niezgodne rozszerzenie JSON i zamiast tego zaoferował zastępcze rozszerzenie, które jest funkcjonalnie równoważne.
Dla jasności: samo PHP NIE usunęło JSON, nadal jest w master . To jest problem dystrybucji / menedżera pakietów.
Rasmus wyjaśnia to całkiem jasno :
Więcej szczegółów
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
źródło
5.5.0
jest w porządkuJSON
, to tylko się5.5.1
psuje.Z Ubuntu:
źródło
apt-get install php7.2-json
z 7.2. Próbowałem tego, ale nadal nie działa. Daje mi błąd w aplikacji laravelphp RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Rozwiązanie dla użytkowników LAMP:
Źródło
źródło
Jeśli używasz phpbrew, spróbuj zainstalować rozszerzenie json, aby naprawić błąd za pomocą niezdefiniowanej funkcji json_decode () :
źródło
Ten sam problem z 7.1
apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini
źródło
Mam to samo pytanie:
PHP Fatal error: Call to undefined function json_decode()
ale uruchamiam php pod cygwin w systemie Windows. Po uruchomieniuphp -m
stwierdziłem, że nie ma zainstalowanego modułu json. Więc ponownie uruchamiam cygwin setup.exe, sprawdzam pakiet json z interfejsu konfiguracyjnego i problem został rozwiązany.źródło
Moduł został zainstalowany, ale dowiązania symbolicznego nie było w /etc/php5/cli/conf.d
źródło
możesz również rozważyć całkowite uniknięcie podstawowego modułu PHP.
W dzisiejszych czasach dość często używa się narzędzi guzzle json jako biblioteki w aplikacjach PHP. Jeśli Twoja aplikacja jest aplikacją kompozytora, umieszczenie ich jako części kompilacji kompozytora jest trywialne. Narzędzie guzzle, jako biblioteka, będzie zamiennikiem narzędzia json pod klucz, jeśli powiesz PHP, aby automatycznie włączył to narzędzie.
http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html
źródło
Zainstalowałem PHP w Centos Docker, to jest mój plik DockerFile:
Aplikacja zwróciła ten sam błąd z kodami json_decode i json_encode
Zainstaluj PHP Common, które ma json_encode i json_decode
Mam inny plik Dockera, który buduje kontener dla API i ma kolejność instalacji klienta php-mysql:
Jeśli użyję tego obrazu do zamontowania aplikacji, json_encode i json_decode będą działać !! Ok ..... Jakie ma to zależności?
Tak! Wewnątrz zależności znajdują się wspólne pakiety. Zainstalowałem go w innym kontenerze i działa! Po umieszczeniu dyrektywy de w DockerFile, zatwierdzenie Git !! Git Tag !!!! Git Push !!!! Gotowy!
źródło