ข้อผิดพลาดร้ายแรงของ PHP: การเรียกไปยังฟังก์ชันที่ไม่ได้กำหนด json_decode ()


165

Apache PHP Fatal error: Call to undefined function json_decode()คือการเข้าสู่ระบบ หลังจาก googling แล้วดูเหมือนว่าปัญหานี้เกิดจากการไม่มี php รุ่นล่าสุด ผิดปกติกำลังเรียกใช้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

เห็นได้ชัดแสดงให้เห็นว่าฉันรุ่นมีค่ามากกว่าphp5.1

แนวคิดใดที่ทำให้เกิดสิ่งนี้หรือขั้นตอนในการค้นหา

แก้ไข: ผลลัพธ์ของสคริปต์สะท้อน phpversion คือ 5.5.1-2+debphp.org~precise

แก้ไข: ผลของการphpinfo()เป็นยังPHP Version 5.5.1-2+debphp.org~precise+2

นอกจากนี้ในphpinfo()รายการโมดูล JSON และผู้เขียนโมดูล (Omar Kilani, Scott MacVicar)


4
ตรวจสอบdisable_functionsคำสั่ง ini เพื่อดูว่าjson_decodeอยู่ในรายการนั้นหรือไม่
Orangepill

โมดูล json แสดงในเอาต์พุต phpinfo () ของคุณหรือไม่?
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

อูบุนตู 12.04 php-services-jsonมีแพคเกจ: บางทีนี่อาจช่วย ...
jgb

1
@jgb นั่นคือแพ็คเกจแพร์ Services_Json ซึ่งยังค่อนข้างครอบคลุมแจงจาวาสคริปต์ไม่ใช่แค่ JSON แต่มีการใช้งาน userland อื่น ๆ การปรับใช้โดยตรงjson_decodeอีกครั้ง
มาริโอ

คำตอบ:


354

ใช้ Ubuntu หรือ

คำตอบสั้น ๆ :

sudo apt-get install php7.2-json

(หรือphp7.1-jsonหรือ php5-jsonขึ้นอยู่กับรุ่น PHP ที่คุณกำลังใช้งาน)

แน่นอนว่าต้องรีสตาร์ท Apache :

sudo service apache2 restart

หรือถ้าคุณใช้ PHP-FPM:

sudo service php7.2-fpm restart

(หรือphp7.1-fpmหรือphp5-fpm)

คำอธิบาย

Debian ได้ลบส่วนขยาย JSON ก่อนหน้านี้ตั้งแต่ PHP 5.5rc2 เนื่องจากข้อขัดแย้งของใบอนุญาต

ใบอนุญาต JSONมีข้อที่ระบุดังนี้

ซอฟต์แวร์จะถูกใช้เพื่อประโยชน์ที่ดีไม่ใช่ชั่ว

สิ่งนี้ทำให้เกิดปัญหากับคำจำกัดความของ Free Software Foundation ของซอฟต์แวร์ฟรีซึ่งระบุว่า:

อิสระในการรันโปรแกรมเพื่อวัตถุประสงค์ใด ๆ (Freedom 0)

FSF ไปเฉพาะรายการใบอนุญาตเป็น JSON nonfree

ใช่มันดูโง่ไปหน่อย อย่างไรก็ตาม Debian ได้ลบส่วนขยาย JSON ที่ไม่เป็นไปตามข้อกำหนดและเสนอส่วนขยายทดแทนที่เทียบเท่ากับหน้าที่แทน

เพื่อความชัดเจน: PHP เองไม่ได้ลบ JSON มันยังอยู่ในระดับต้น ๆ นี่เป็นปัญหาของตัวจัดการ distro / package

Rasmus ทำให้ชัดเจน :

เรายังไม่ได้ลบ json และเราจะไม่ปล่อย php รุ่นใด ๆ หากไม่มีการสนับสนุน json ในตัวการเปลี่ยนแปลงใด ๆ ใน 5.5 เกิดจากสิ่งที่บรรจุภัณฑ์ distro ที่คุณใช้ซึ่งเราไม่สามารถควบคุมได้

รายละเอียดเพิ่มเติม

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


ฉันกลับมาพูดถึงว่ามันดูราวกับว่า5.5.0เป็นเรื่องJSONปกติมันเป็นเพียง5.5.1ที่หยุดพัก
MirroredFate

2
5.5.3 ไม่มีเลย (Ubuntu 13.10)
Luis Lobo Borobia

9
อย่าลืมรีสตาร์ท apache หลังจากติดตั้งโมดูล json ด้วยคำสั่งที่ Chris พูดถึง
Pavel

1
หาก php-json เป็นที่พึ่งของ php-common ทั้งหมดนี้จะหายไป ... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ... โปรดลงคะแนนถ้านี่เป็นปัญหาสำหรับคุณ
rickfoosusa

20
มีใครบ้างที่พบว่า"ความชั่วร้าย"ที่กระทบกระเทือนซึ่งการยกเว้นสิทธิ์ใช้งานซอฟต์แวร์นี้มีค่าใช้จ่ายในการทำวิจัยหนึ่งชั่วโมง
recursion.ninja

13

ด้วย Ubuntu:

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

ประมาณapt-get install php7.2-json 7.2 ฉันลองสิ่งนี้ แต่ก็ยังไม่ทำงาน ให้ข้อผิดพลาดกับฉันในแอป laravel php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel

8

โซลูชันสำหรับผู้ใช้ LAMP:

apt-get install php5-json
service apache2 restart

แหล่ง


หากการรีสตาร์ทล้มเหลวในการแก้ไขข้อผิดพลาดให้ฆ่ากระบวนการ apache2 และเริ่มต้น: sudo pkill apache2; service apache2 start
xilef

3

หากคุณใช้phpbrewลองติดตั้งส่วนขยายjsonเพื่อแก้ไขข้อผิดพลาดด้วยฟังก์ชั่นที่ไม่ได้กำหนด json_decode () :

phpbrew ext install json

2

ปัญหาเดียวกันกับ 7.1

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

  • เพิ่ม json.so ไปยังไฟล์ใหม่
  • เพิ่มลิงค์ sym ที่เหมาะสมภายใต้ conf.d
  • เริ่มบริการ apache2 (ถ้าจำเป็น)

2

ฉันมีคำถามเดียวกัน: PHP Fatal error: Call to undefined function json_decode()แต่ฉันใช้ php ภายใต้ cygwin บน Windows เมื่อฉันรันphp -mฉันพบว่าไม่มีโมดูล json ติดตั้งอยู่ ดังนั้นฉันจึงเรียกใช้ cygwin setup.exe อีกครั้งตรวจสอบแพคเกจ json จากอินเตอร์เฟสการกำหนดค่าและแก้ไขปัญหาได้แล้ว



0

คุณอาจพิจารณาหลีกเลี่ยงโมดูล PHP หลักโดยสิ้นเชิง

เป็นเรื่องปกติมากที่จะใช้ guzzle json tools เป็นไลบรารีในแอพ PHP ในปัจจุบัน หากแอพของคุณเป็นแอพแต่งเพลงมันเป็นเรื่องสำคัญที่จะรวมพวกเขาเป็นส่วนหนึ่งของการสร้างผู้แต่ง เครื่องมือ guzzle ในฐานะห้องสมุดจะเป็นเครื่องมือทดแทนแบบครบวงจรสำหรับเครื่องมือ json ถ้าคุณบอกให้ PHP รวมเครื่องมือโดยอัตโนมัติ

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

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


json_decode ของ Guzzle กำลังใช้ json_decode ของ phpพร้อมการตรวจสอบข้อผิดพลาดเพิ่มเติมดังนั้นคำตอบของคุณจึงไม่ถูกต้อง
emix

0

CentOS

ฉาก

ฉันติดตั้ง PHP ใน Centos Docker นี่คือ 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"]

แอปส่งคืนข้อผิดพลาดเดียวกันกับ json_decode และ json_encode

มติ

ติดตั้ง PHP Common ที่มี json_encode และ json_decode

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

วิธีค้นหาความละเอียด

ฉันมีไฟล์ Docker อีกไฟล์ที่สร้างคอนเทนเนอร์สำหรับ API และมีคำสั่งให้ติดตั้งไคลเอนต์ php-mysql:

yum install php72w-mysql.x86_64 -y

หากฉันใช้ภาพเหล่านี้เพื่อติดตั้งแอปพลิเคชัน json_encode และ json_decode ใช้งานได้ !! โอเค ..... มันมีการพึ่งพาอะไรบ้าง?

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

ใช่ ภายในการพึ่งพาเป็นแพคเกจทั่วไป ฉันติดตั้งลงในคอนเทนเนอร์อื่นแล้วและใช้งานได้! หลังจากนั้นฉันใส่คำสั่งลงใน DockerFile, Git กระทำ !! แท็ก Git !!!! Git Push !!!! พร้อม!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.