webentwicklung-frage-antwort-db.com.de

PHP Schwerwiegender Fehler: Aufruf der undefinierten Funktion json_decode ()

Apache protokolliert PHP Fatal error: Call to undefined function json_decode(). Nach einigem googeln scheint es, dass dieses Problem darauf zurückzuführen ist, dass nicht die neueste Version von PHP verfügbar ist. Seltsamerweise wird php --version Ausgegeben

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 erkennen, dass meine php -Version größer als 5.1 Ist.

Irgendwelche Ideen, was dazu führen könnte, oder welche Schritte unternommen werden müssen, 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 auch PHP Version 5.5.1-2+debphp.org~precise+2

Außerdem werden in der phpinfo() das Modul JSON und die Modulautoren (Omar Kilani, Scott MacVicar) aufgelistet.

154
MirroredFate

Verwenden Sie Ubuntu?

Kurze Antwort:

Sudo apt-get install php7.2-json

(oder php7.1-json oder php5-json abhä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-fpm oder php5-fpm)

Erläuterung

Debian hat die vorherige JSON-Erweiterung von PHP 5.5rc2 wegen eines Lizenzkonflikts entfernt.

Die JSON-Lizenz hat eine Klausel, die besagt:

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

Dies verursacht ein Problem mit Definition der Free Software Foundation , das besagt:

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

FSF fährt fort mit insbesondere die JSON-Lizenz als nicht frei aufzulisten .

Ja, es scheint ein bisschen albern. Trotzdem hat Debian die nicht konforme JSON-Erweiterung entfernt und stattdessen eine Ersatzerweiterung angeboten, die funktional äquivalent ist.

Um es klar auszudrücken: PHP hat JSON NICHT selbst entfernt, es ist 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 eingebauten json-Support veröffentlichen. Alle Änderungen in 5.5 sind auf die von Ihnen verwendete Distribution zurückzuführen, auf die wir keinen Einfluss 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=6352

http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support

343
jszobody

Mit Ubuntu:

Sudo apt-get install php5-json
Sudo service php5-fpm restart
14
David

Lösung für LAMP-Benutzer:

apt-get install php5-json
service Apache2 restart

Quelle

9
milkovsky

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

phpbrew ext install json
1
yesnik

Ich habe die gleiche Frage: PHP Fatal error: Call to undefined function json_decode(), aber ich starte PHP unter Cygwin unter Windows. Wenn ich php -m, Ich habe festgestellt, dass kein json-Modul installiert ist. Also starte ich cygwin setup.exe erneut, überprüfe json package von der Konfigurationsoberfläche und das Problem ist gelöst.

1
Rafy

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)
1
Carl Hinton

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

1
NicoMinsk

sie könnten auch erwägen, das Kernmodul PHP insgesamt zu vermeiden.

Heutzutage ist es üblich, die Tools von guzzle json als Bibliothek für PHP apps zu verwenden. Wenn Ihre App eine composer app ist, ist es trivial, sie einzuschließen Sie sind Teil eines composer build. Das guzzle-Tool als Bibliothek wäre ein schlüsselfertiger Ersatz für das json-Tool, wenn Sie PHP to Schließen Sie das Tool automatisch ein.

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

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

0
jaxxed

CENTOS

Szene

Ich habe PHP in Centos Docker installiert, dies ist meine DockerFile:

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 denselben 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 die Anweisung hat, den PHP-MySQL-Client zu installieren:

yum install php72w-mysql.x86_64 -y

Wenn ich dieses Bild verwende, um die App zu mounten, funktionieren der json_encode und der json_decode !! Ok ..... Welche Abhängigkeiten hat das?

[[email protected] 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 gängigen Pakete. Ich habe es in meinen anderen Container installiert und es funktioniert! Danach habe ich die Direktive in DockerFile geschrieben, Git commit !! Git Tag !!!! Git Push !!!! Bereit!

0
Joan Teran