PHP Fatal error: Panggil ke fungsi yang tidak ditentukan json_decode ()

165

Apache sedang login PHP Fatal error: Call to undefined function json_decode(). Setelah beberapa googling, sepertinya masalah ini adalah hasil dari tidak memiliki versi terbaru dari php. Anehnya, menjalankan php --versionouputs

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

Jelas menunjukkan bahwa phpversi saya lebih besar dari 5.1.

Adakah gagasan tentang apa yang menyebabkan hal ini, atau langkah-langkah yang perlu diambil untuk mengetahuinya?

EDIT: Hasil dari skrip yang mendukung phpversion adalah 5.5.1-2+debphp.org~precise

EDIT: Hasilnya phpinfo()jugaPHP Version 5.5.1-2+debphp.org~precise+2

Selanjutnya, dalam phpinfo(), itu daftar modul JSON dan penulis modul (Omar Kilani, Scott MacVicar).

Mirrored Fate
sumber
4
Periksa disable_functionsarahan ini untuk melihat apakah json_decodeada dalam daftar itu
Orangepill
Apakah modul json muncul di output phpinfo () Anda?
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 memiliki paket: php-services-json. Mungkin ini membantu ...
jgb
1
@ jgb Itu adalah paket PEAR Services_Json. Yang juga cukup mencakup, mem-parsing sedikit Javascript, bahkan tidak hanya JSON. Tetapi ada implementasi userland lain yang secara langsung mengimplementasikan ulang json_decode.
mario

Jawaban:

354

Menggunakan Ubuntu?

Jawaban singkat:

sudo apt-get install php7.2-json

(atau php7.1-jsonatau php5-jsontergantung pada versi PHP yang Anda jalankan)

Maka tentu saja pastikan Anda me-restart Apache :

sudo service apache2 restart

Atau jika Anda menggunakan PHP-FPM:

sudo service php7.2-fpm restart

(Atau php7.1-fpmatau php5-fpm)

Penjelasan

Debian telah menghapus ekstensi JSON sebelumnya pada PHP 5.5rc2 karena konflik lisensi.

The lisensi JSON memiliki klausul yang menyatakan:

Perangkat Lunak ini akan digunakan untuk yang Baik, bukan yang Jahat.

Ini menyebabkan masalah dengan definisi Free Software Foundation tentang perangkat lunak gratis yang menyatakan:

Kebebasan untuk menjalankan program, untuk tujuan apa pun (kebebasan 0).

FSF selanjutnya secara khusus mencantumkan lisensi JSON sebagai tidak bebas .

Ya sepertinya agak konyol. Namun demikian Debian telah menghapus ekstensi JSON yang tidak patuh, dan sebaliknya menawarkan ekstensi pengganti yang secara fungsional setara.

Untuk menjadi jelas: PHP itu sendiri TIDAK menghapus JSON, itu masih di master . Ini adalah masalah manajer distro / paket.

Rasmus membuatnya sangat jelas :

Kami belum menghapus json dan kami tidak akan pernah merilis versi php tanpa dukungan json bawaan. Setiap perubahan pada 5.5 disebabkan oleh kemasan distro apa pun yang Anda gunakan yang tidak dapat kami kontrol.

Keterangan lebih lanjut

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
sumber
Saya kembali untuk menyebutkan bahwa sepertinya 5.5.0baik-baik saja JSON, hanya 5.5.1itu yang rusak.
MirroredFate
2
5.5.3 tidak memilikinya juga (Ubuntu 13.10)
Luis Lobo Borobia
9
Jangan lupa untuk me-restart apache setelah menginstal modul json dengan perintah yang disebutkan Chris.
Pavel
1
Jika php-json adalah dependensi dari php-common, semua ini akan hilang ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... silakan pilih apakah ini masalah bagi Anda.
rickfoosusa
20
Adakah yang secara ironis "jahat" bahwa pengecualian lisensi perangkat lunak ini menghabiskan waktu satu jam untuk penelitian?
recursion.ninja
13

Dengan Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
David
sumber
Bagaimana dengan apt-get install php7.2-json 7.2. Saya mencoba ini tetapi masih tidak berhasil. Memberi saya kesalahan pada aplikasi laravel php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel
8

Solusi untuk pengguna LAMP:

apt-get install php5-json
service apache2 restart

Sumber

milkovsky
sumber
Jika restart gagal untuk menyelesaikan kesalahan, matikan proses apache2 dan mulai: sudo pkill apache2; service apache2 start
xilef
3

Jika Anda menggunakan phpbrew, coba instal ekstensi json untuk memperbaiki kesalahan dengan fungsi yang tidak ditentukan json_decode () :

phpbrew ext install json
yesnik
sumber
2

Masalah yang sama dengan 7.1

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

  • Tambahkan json.so ke file baru
  • Tambahkan tautan sym yang tepat di bawah conf.d
  • Mulai ulang layanan apache2 (jika perlu)
Carl Hinton
sumber
2

Saya memiliki pertanyaan yang sama:, PHP Fatal error: Call to undefined function json_decode()tetapi saya menjalankan php di bawah cygwin di Windows. Ketika saya menjalankan php -m, saya menemukan bahwa tidak ada modul json yang diinstal. Jadi saya jalankan cygwin setup.exe lagi, periksa paket json dari antarmuka konfigurasi, dan masalahnya terpecahkan.

Rafy
sumber
1

Modul ini dipasang tetapi tautan simbolik tidak ada di /etc/php5/cli/conf.d

NicoMinsk
sumber
0

Anda mungkin juga mempertimbangkan untuk menghindari modul PHP inti sekaligus.

Sangat umum untuk menggunakan alat guzzle json sebagai perpustakaan di aplikasi PHP hari ini. Jika aplikasi Anda adalah aplikasi komposer, sepele untuk memasukkannya sebagai bagian dari komposer. Alat guzzle, sebagai pustaka, akan menjadi pengganti turnkey untuk alat json, jika Anda memberi tahu PHP untuk menyertakan alat secara otomatis.

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

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

Jaxxed
sumber
Json_decode Guzzle menggunakan json_decode php dengan pemeriksaan kesalahan tambahan, jadi jawaban Anda tidak valid
emix
0

CENTOS

Tempat kejadian

Saya menginstal PHP di Centos Docker, ini DockerFile saya:

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

Aplikasi mengembalikan kesalahan yang sama dengan json_decode dan json_encode

Resolusi

Instal PHP Common yang memiliki json_encode dan json_decode

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

Bagaimana cara menemukan resolusi?

Saya memiliki File Docker lain yang membangun wadah untuk API dan memiliki perintah untuk menginstal klien php-mysql:

yum install php72w-mysql.x86_64 -y

Jika saya menggunakan gambar ini untuk memasang aplikasi, json_encode dan json_decode berfungsi !! Ok ..... Ketergantungan apa yang dimiliki ini?

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

Iya! Di dalam dependensi adalah paket umum. Saya memasangnya di wadah saya yang lain dan berfungsi! Setelah itu, saya menaruh arahan ke DockerFile, Git commit !! Tag Git !!!! Git Push !!!! Siap!

Joan Teran
sumber