Schwerwiegender PHP-Fehler: Aufruf der undefinierten Funktion json_decode ()

165

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 --versionAusgä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 phpVersion 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.

MirroredFate
quelle
4
Überprüfen Sie die disable_functionsINI-Direktive, um festzustellen, ob sie json_decodein dieser Liste enthalten ist
Orangepill
Wird das JSON-Modul in Ihrer phpinfo () - Ausgabe angezeigt?
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 hat ein Paket : php-services-json. Vielleicht hilft das ...
JGB
1
@jgb Das ist das PEAR-Paket Services_Json. Was auch ziemlich umfassend ist, analysiert ein bisschen Javascript, nicht nur JSON. Es gibt jedoch andere Userland-Implementierungen, die direkt neu implementiert werden json_decode.
Mario

Antworten:

354

Verwenden Sie Ubuntu?

Kurze Antwort:

sudo apt-get install php7.2-json

(oder php7.1-jsonoder php5-jsonabhängig von der PHP-Version, die Sie ausführen)

Dann stellen Sie natürlich sicher, dass Sie Apache neu starten :

sudo service apache2 restart

Oder wenn Sie PHP-FPM verwenden:

sudo service php7.2-fpm restart

(Oder php7.1-fpmoder php5-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:

Die Software soll zum Guten und nicht zum Bösen verwendet werden.

Dies verursacht ein Problem mit der Definition von Free Software Foundation durch Free Software Foundation, in der Folgendes angegeben ist:

Die Freiheit, das Programm für jeden Zweck auszuführen (Freiheit 0).

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 :

Wir haben json nicht entfernt und werden niemals eine Version von PHP ohne integrierte json-Unterstützung veröffentlichen. Alle Änderungen in 5.5 sind auf die von Ihnen verwendete Distribution-Verpackung zurückzuführen, über die wir keine Kontrolle haben.

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

jszobody
quelle
Ich kam zurück, um zu erwähnen, dass es so aussieht, als wäre 5.5.0es in Ordnung JSON, es ist nur das 5.5.1, was bricht.
MirroredFate
2
5.5.3 hat es auch nicht (Ubuntu 13.10)
Luis Lobo Borobia
9
Vergessen Sie nicht, Apache nach der Installation des JSON-Moduls mit dem von Chris genannten Befehl neu zu starten.
Pavel
1
Wenn php-json eine Abhängigkeit von php-common wäre, würde dies alles verschwinden ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... bitte stimmen Sie ab, ob dies ein Problem für Sie war.
Rickfoosusa
20
Findet es jemand ironischerweise "böse", dass dieser Ausschluss von Softwarelizenzen mich eine Stunde Recherchezeit gekostet hat?
recursion.ninja
13

Mit Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
David
quelle
Was ist mit apt-get install php7.2-json 7.2. Ich habe es versucht, aber es funktioniert immer noch nicht. Geben Sie mir Fehler auf Laravel App php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel
8

Lösung für LAMP-Benutzer:

apt-get install php5-json
service apache2 restart

Quelle

melkowski
quelle
Wenn ein Neustart den Fehler nicht beheben kann, beenden Sie die Apache2-Prozesse und starten Sie: sudo pkill apache2; Service
Apache2
3

Wenn Sie phpbrew verwenden, versuchen Sie, die json- Erweiterung zu installieren , um den Fehler mit der undefinierten Funktion json_decode () zu beheben :

phpbrew ext install json
yesnik
quelle
2

Das gleiche Problem mit 7.1

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

  • Fügen Sie der neuen Datei json.so hinzu
  • Fügen Sie den entsprechenden Sym-Link unter conf.d hinzu
  • Starten Sie den Apache2-Dienst neu (falls erforderlich).
Carl Hinton
quelle
2

Ich habe die gleiche Frage PHP Fatal error: Call to undefined function json_decode():, aber ich starte PHP unter Cygwin unter Windows. Beim Ausführen php -mstellte 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.

Rafy
quelle
1

Das Modul wurde installiert, aber der symbolische Link befand sich nicht in /etc/php5/cli/conf.d

NicoMinsk
quelle
0

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

jaxxed
quelle
Der json_decode von Guzzle verwendet den json_decode von php mit zusätzlicher Fehlerprüfung, sodass Ihre Antwort ungültig ist
emix
0

CENTOS

Szene

Ich habe PHP in Centos Docker installiert. Dies ist meine Docker-Datei:

FROM centos:7.6.1810

LABEL maintainer="[email protected]"

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"]

Die App hat den gleichen Fehler mit json_decode und json_encode zurückgegeben

Auflösung

Installieren Sie PHP Common mit json_encode und json_decode

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

Wie finde ich die Auflösung?

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:

yum install php72w-mysql.x86_64 -y

Wenn ich dieses Image zum Mounten der App verwende, funktionieren der json_encode und der json_decode !! Ok ..... Welche Abhängigkeiten hat das?

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

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!

Joan Teran
quelle