PHP Önemli hata: Tanımlanmamış işleve çağrı json_decode ()


165

Apache günlüğe kaydediyor PHP Fatal error: Call to undefined function json_decode(). Bazı googling sonra, bu sorun php en son sürümüne sahip değil bir sonucu gibi görünüyor. İşin garibi, çalışan php --versionçıkışlar

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

Benim phpversiyonumun daha büyük olduğunu açıkça gösteriyor 5.1.

Buna neyin yol açabileceği hakkında herhangi bir fikir veya öğrenmek için atılacak adımlar?

EDIT: phpversion yankılanan bir komut dosyası sonucu 5.5.1-2+debphp.org~precise

EDIT: sonucu phpinfo()daPHP Version 5.5.1-2+debphp.org~precise+2

Ayrıca, phpinfo()JSON modülünü ve modül yazarlarını (Omar Kilani, Scott MacVicar) listeler.


4
Bu listede disable_functionsolup olmadığını görmek için ini yönergesini kontrol edinjson_decode
Orangepill

Json modülü phpinfo () çıktısında görünüyor mu?
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 bir paket var: php-services-json. Belki bu yardımcı olur ...
jgb

1
@jgb Bu PEAR paketi Services_Json. Hangi oldukça kapsayıcı, sadece JSON bile, biraz Javascript ayrıştırır. Ancak doğrudan yeniden uygulanan başka kullanıcı alanı uygulamaları da vardır json_decode.
mario

Yanıtlar:


354

Ubuntu mu kullanıyorsunuz?

Kısa cevap:

sudo apt-get install php7.2-json

(veya php7.1-jsonveya php5-jsonçalıştırdığınız PHP sürümüne bağlı)

Sonra elbette Apache'yi yeniden başlattığınızdan emin olun :

sudo service apache2 restart

Veya PHP-FPM kullanıyorsanız:

sudo service php7.2-fpm restart

(Veya php7.1-fpmveya php5-fpm)

açıklama

Debian, bir lisans çakışması nedeniyle PHP 5.5rc2'den önceki JSON uzantısını kaldırmıştır.

JSON lisans bildiren bir cümle var:

Yazılım Kötülük için değil, İyilik için kullanılacaktır.

Bu, Özgür Yazılım Vakfı'nın özgür yazılım tanımıyla ilgili bir soruna neden olur :

Herhangi bir amaç için programı çalıştırma özgürlüğü (özgürlük 0).

FSF , JSON lisansını özellikle özgür olmayan olarak listelemeye devam eder .

Evet biraz saçma görünüyor. Yine de Debian, uyumlu olmayan JSON uzantısını kaldırdı ve bunun yerine işlevsel olarak eşdeğer bir yedek uzantı sundu .

Açık olmak gerekirse: PHP'nin kendisi JSON'u SİLMEDİ, hala master . Bu bir dağıtım / paket yöneticisi sorunudur.

Rasmus bunu açıkça ortaya koyuyor :

Json'u kaldırmadık ve yerleşik bir json desteği olmadan asla php'nin bir sürümünü yayınlamayacağız.

Daha fazla detay

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


Sanki 5.5.0iyi gibi göründüğünden bahsetmek için geri geldim JSON, sadece 5.5.1o kırılıyor.
MirroredFate

2
5.5.3 de yok (Ubuntu 13.10)
Luis Lobo Borobia

9
Chris'in bahsettiği komutla json modülünü kurduktan sonra apache'yi yeniden başlatmayı unutmayın.
Pavel

1
Eğer php-json php-common bağımlılığı olsaydı, hepsi gider ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... bu sizin için bir sorunsa lütfen oy verin.
rickfoosusa

20
Herkes ironik bir şekilde bu yazılım lisans dışlama bana bir saatlik araştırma süresi malil "kötü" bulur mu ?
recursion.ninja

13

Ubuntu ile:

sudo apt-get install php5-json
sudo service php5-fpm restart

apt-get install php7.2-json 7.2 için ne dersiniz ? Bunu denedim ama hala çalışmıyor. Laravel uygulamasında bana hata veriyorphp RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel

8

LAMP kullanıcıları için çözüm:

apt-get install php5-json
service apache2 restart

Kaynak


Yeniden başlatma hatayı çözemezse, apache2 işlemlerini öldürün ve başlayın: sudo pkill apache2; hizmet apache2 başlangıç
xilef

3

Phpbrew kullanıyorsanız , tanımsız işlev json_decode () ile hatayı düzeltmek için json uzantısını yüklemeyi deneyin :

phpbrew ext install json

2

7.1 ile aynı sorun

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

  • Json.so dosyasını yeni dosyaya ekleyin
  • Konf altındaki uygun sym bağlantısını ekleyin. D
  • Apache2 hizmetini yeniden başlatın (gerekirse)

2

Aynı sorum var:, PHP Fatal error: Call to undefined function json_decode()ama Windows üzerinde cygwin altında php çalıştırın. Çalıştığımda php -m, yüklü json modülünün olmadığını buldum. Bu yüzden cygwin setup.exe'yi tekrar çalıştırıyorum, yapılandırma arayüzünden json paketini kontrol ediyorum ve sorun çözüldü.


1

Modül kuruldu ancak sembolik bağlantı /etc/php5/cli/conf.d konumunda değildi.


0

çekirdek PHP modülünden tamamen kaçınmayı da düşünebilirsiniz.

Günümüzde PHP uygulamalarında guzzle json araçlarını bir kütüphane olarak kullanmak oldukça yaygındır. Uygulamanız bir besteci uygulamasıysa, bunları bir besteci derlemesinin bir parçası olarak dahil etmek önemsizdir. PHP'ye aracı otomatik olarak eklemesini söylerseniz, kitaplık olarak guzzle aracı, json aracı için anahtar teslim bir yedek olacaktır.

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

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


Guzzle'ın json_decode'u ek hata kontrolü ile php'nin json_decode'unu kullanıyor , bu yüzden cevabınız geçersiz
emix

0

CentOS

Faliyet alani, sahne

Ben Centos Docker PHP yükledim, bu benim DockerFile:

FROM centos:7.6.1810

LABEL maintainer="teran.a.joan@gmail.com"

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

Uygulama, json_decode ve json_encode ile aynı hatayı döndürdü

çözüm

Json_encode ve json_decode olan PHP Common'u yükleyin

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

Çözünürlük nasıl bulunur?

API için kapsayıcı oluşturmak başka bir Docker dosya var ve php-mysql istemci yükleme sırası vardır:

yum install php72w-mysql.x86_64 -y

Uygulamayı monte etmek için bu görüntüyü kullanırsanız, json_encode ve json_decode çalışır !! Tamam ..... Bunun ne gibi bağımlılıkları var?

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

Evet! Bağımlılıkların içinde ortak paketler var. Diğer kabıma kurdum ve işe yarıyor! Sonra, Do Direktifi DockerFile içine koydum, Git taahhüt !! Git Etiketi !!!! Git Push !!!! Hazır!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.