Apache protokolliert PHP Fatal error: Call to undefined function json_decode()
. Nach einigem googeln scheint dieses Problem darauf zurückzuführen zu sein, dass nicht die neueste Version von PHP vorhanden ist. Seltsamerweise laufen php --version
Ausgänge
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
Deutlich zu zeigen, dass meine php
Version größer ist als 5.1
.
Irgendwelche Ideen, was dies verursachen könnte, oder die Schritte, um dies herauszufinden?
BEARBEITEN: Das Ergebnis eines Skripts, das phpversion wiedergibt, ist 5.5.1-2+debphp.org~precise
EDIT: Das Ergebnis von phpinfo()
ist auchPHP Version 5.5.1-2+debphp.org~precise+2
Darüber hinaus werden im phpinfo()
Modul das Modul JSON und die Modulautoren (Omar Kilani, Scott MacVicar) aufgelistet.
disable_functions
INI-Direktive, um festzustellen, ob siejson_decode
in dieser Liste enthalten istdisable_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
. Vielleicht hilft das ...json_decode
.Antworten:
Verwenden Sie Ubuntu?
Kurze Antwort:
(oder
php7.1-json
oderphp5-json
abhängig von der PHP-Version, die Sie ausführen)Dann stellen Sie natürlich sicher, dass Sie Apache neu starten :
Oder wenn Sie PHP-FPM verwenden:
(Oder
php7.1-fpm
oderphp5-fpm
)Erläuterung
Debian hat die vorherige JSON-Erweiterung ab PHP 5.5rc2 aufgrund eines Lizenzkonflikts entfernt.
Die JSON-Lizenz enthält eine Klausel, die besagt:
Dies verursacht ein Problem mit der Definition von Free Software Foundation durch Free Software Foundation, in der Folgendes angegeben ist:
FSF führt die JSON-Lizenz speziell als nicht kostenlos auf .
Ja, es scheint ein bisschen albern. Trotzdem hat Debian die nicht konforme JSON-Erweiterung entfernt und stattdessen eine Ersatzerweiterung angeboten , die funktional gleichwertig ist.
Um es klar zu sagen: PHP selbst hat JSON NICHT entfernt, es befindet sich immer noch im Master . Dies ist ein Problem mit dem Distributions- / Paketmanager.
Rasmus macht es ziemlich klar :
Mehr Details
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
quelle
5.5.0
es in OrdnungJSON
, es ist nur das5.5.1
, was bricht.Mit Ubuntu:
quelle
apt-get install php7.2-json
7.2. Ich habe es versucht, aber es funktioniert immer noch nicht. Geben Sie mir Fehler auf Laravel Appphp RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Lösung für LAMP-Benutzer:
Quelle
quelle
Wenn Sie phpbrew verwenden, versuchen Sie, die json- Erweiterung zu installieren , um den Fehler mit der undefinierten Funktion json_decode () zu beheben :
quelle
Das gleiche Problem mit 7.1
apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini
quelle
Ich habe die gleiche Frage
PHP Fatal error: Call to undefined function json_decode()
:, aber ich starte PHP unter Cygwin unter Windows. Beim Ausführenphp -m
stellte ich fest, dass kein JSON-Modul installiert ist. Also führe ich cygwin setup.exe erneut aus, überprüfe das json-Paket über die Konfigurationsoberfläche und das Problem ist behoben.quelle
Das Modul wurde installiert, aber der symbolische Link befand sich nicht in /etc/php5/cli/conf.d
quelle
Sie können auch das PHP-Kernmodul ganz vermeiden.
Heutzutage ist es durchaus üblich, die guzzle json-Tools als Bibliothek in PHP-Apps zu verwenden. Wenn Ihre App eine Composer-App ist, ist es trivial, sie als Teil eines Composer-Builds einzuschließen. Das Guzzle-Tool als Bibliothek wäre ein schlüsselfertiger Ersatz für das JSON-Tool, wenn Sie PHP anweisen, das Tool automatisch einzuschließen.
http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html
quelle
Ich habe PHP in Centos Docker installiert. Dies ist meine Docker-Datei:
Die App hat den gleichen Fehler mit json_decode und json_encode zurückgegeben
Installieren Sie PHP Common mit json_encode und json_decode
Ich habe eine andere Docker-Datei, die den Container für die API erstellt, und sie hat die Reihenfolge, den php-mysql-Client zu installieren:
Wenn ich dieses Image zum Mounten der App verwende, funktionieren der json_encode und der json_decode !! Ok ..... Welche Abhängigkeiten hat das?
Ja! Innerhalb der Abhängigkeiten befinden sich die allgemeinen Pakete. Ich habe es in meinen anderen Container installiert und es funktioniert! Danach habe ich die Direktive in DockerFile eingefügt, Git Commit !! Git Tag !!!! Git Push !!!! Bereit!
quelle