Lỗi nghiêm trọng của PHP: Gọi hàm không xác định json_decode ()


165

Apache đang đăng nhập PHP Fatal error: Call to undefined function json_decode(). Sau một số googling, có vẻ như vấn đề này là kết quả của việc không có phiên bản mới nhất của php. Kì lạ, chạy 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

Rõ ràng cho thấy rằng phpphiên bản của tôi lớn hơn 5.1.

Bất kỳ ý tưởng nào về những gì có thể gây ra điều này, hoặc các bước cần thực hiện để tìm hiểu?

EDIT: Kết quả của một đoạn script lặp lại phpversion là 5.5.1-2+debphp.org~precise

EDIT: Kết quả phpinfo()cũng làPHP Version 5.5.1-2+debphp.org~precise+2

Hơn nữa, trong phần này phpinfo(), nó liệt kê mô-đun JSON và các tác giả mô-đun (Omar Kilani, Scott MacVicar).


4
Kiểm tra disable_functionschỉ thị ini để xem json_decodecó trong danh sách đó không
Orangepill

Mô-đun json có hiển thị trong đầu ra phpinfo () của bạn không?
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 có một gói : php-services-json. Có lẽ điều này giúp ...
jgb

1
@jgb Đó là gói PEAR Services_Json. Điều này cũng khá bao quát, phân tích cú pháp một chút Javascript, không chỉ JSON. Nhưng có những triển khai người dùng khác trực tiếp thực hiện lại json_decode.
mario

Câu trả lời:


354

Sử dụng Ubuntu?

Câu trả lời ngắn:

sudo apt-get install php7.2-json

(hoặc php7.1-jsonhoặc php5-jsontùy thuộc vào phiên bản PHP bạn đang chạy)

Sau đó, tất nhiên hãy chắc chắn rằng bạn khởi động lại Apache :

sudo service apache2 restart

Hoặc nếu bạn đang sử dụng PHP-FPM:

sudo service php7.2-fpm restart

(Hoặc php7.1-fpmhoặc php5-fpm)

Giải trình

Debian đã loại bỏ phần mở rộng JSON trước đó kể từ PHP 5.5rc2 do xung đột giấy phép.

Các giấy phép JSON có một điều khoản trong đó nêu:

Phần mềm sẽ được sử dụng cho Tốt chứ không phải Ác.

Điều này gây ra vấn đề với định nghĩa về phần mềm miễn phí của Tổ chức Phần mềm Tự do , trong đó nêu rõ:

Tự do chạy chương trình, cho bất kỳ mục đích nào (tự do 0).

FSF tiếp tục liệt kê cụ thể giấy phép JSON là không miễn phí .

Vâng, nó có vẻ hơi ngớ ngẩn. Tuy nhiên, Debian đã loại bỏ phần mở rộng JSON không tuân thủ và thay vào đó cung cấp một phần mở rộng thay thế tương đương về mặt chức năng.

Để rõ ràng: Bản thân PHP KHÔNG xóa JSON, nó vẫn ở trạng thái chính . Đây là một vấn đề quản lý distro / gói.

Rasmus làm cho nó khá rõ ràng :

Chúng tôi chưa xóa json và chúng tôi sẽ không bao giờ phát hành phiên bản php mà không có hỗ trợ json tích hợp. Mọi thay đổi trong 5.5 là do bất kỳ bao bì phân phối nào bạn đang sử dụng mà chúng tôi không kiểm soát được.

Thêm chi tiết

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/orms.php?id=63520

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


Tôi trở lại để đề cập rằng nó xuất hiện như thể 5.5.0là tốt với JSON, nó chỉ 5.5.1là phá vỡ.
MirroredFate

2
5.5.3 cũng không có (Ubuntu 13.10)
Luis Lobo Borobia

9
Đừng quên khởi động lại apache sau khi cài đặt mô-đun json với lệnh Chris đã đề cập.
Pavel

1
Nếu php-json là một sự phụ thuộc của php-common thì tất cả sẽ biến mất ... bug.launchpad.net/ubfox/+source/ubiquity/+orms/1280030 ... vui lòng bỏ phiếu nếu đây là vấn đề với bạn.
rickfoosusa

20
Có ai thấy nó thật " trớ trêu " khi loại trừ cấp phép phần mềm này khiến tôi mất một giờ thời gian nghiên cứu không?
đệ quy.ninja

13

Với Ubuntu:

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

Còn về apt-get install php7.2-json 7.2. Tôi đã thử điều này nhưng vẫn không hoạt động. Đưa ra lỗi cho tôi trên ứng dụng laravel php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel

8

Giải pháp cho người dùng LAMP:

apt-get install php5-json
service apache2 restart

Nguồn


Nếu khởi động lại không giải quyết được lỗi, hãy hủy các tiến trình apache2 và bắt đầu: sudo pkill apache2; dịch vụ apache2 bắt đầu
xilef

3

Nếu bạn đang sử dụng phpbrew, hãy thử cài đặt tiện ích mở rộng json để sửa lỗi với hàm không xác định json_decode () :

phpbrew ext install json

2

Vấn đề tương tự với 7.1

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

  • Thêm json.so vào tệp mới
  • Thêm liên kết sym thích hợp trong conf.d
  • Khởi động lại dịch vụ apache2 (nếu cần)

2

Tôi có cùng một câu hỏi : PHP Fatal error: Call to undefined function json_decode(), nhưng tôi chạy php theo cygwin trên Windows. Khi tôi chạy php -m, tôi thấy rằng không có mô-đun json nào được cài đặt. Vì vậy, tôi chạy lại cygwin setup.exe, kiểm tra gói json từ giao diện cấu hình và vấn đề được giải quyết.


1

Mô-đun đã được cài đặt nhưng liên kết tượng trưng không có trong /etc/php5/cli/conf.d


0

bạn cũng có thể cân nhắc tránh hoàn toàn mô-đun PHP cốt lõi.

Ngày nay, việc sử dụng các công cụ json json như một thư viện trong các ứng dụng PHP là khá phổ biến. Nếu ứng dụng của bạn là một ứng dụng dành cho nhà soạn nhạc, việc đưa chúng vào như một phần của bản dựng nhà soạn nhạc là chuyện nhỏ. Công cụ gu gõ, như một thư viện, sẽ là một công cụ thay thế chìa khóa trao tay cho công cụ json, nếu bạn bảo PHP tự động loại bỏ công cụ này.

http://docs.guheadsphp.org/en/urdy/search.html?q=json_encode#

http://apigen.juzna.cz/doc/guheads/guheads/feft-GuheadsHttp.json_decode.html


Guson's json_decode đang sử dụng json_decode của php với kiểm tra lỗi bổ sung, vì vậy câu trả lời của bạn không hợp lệ
emix 29/11/18

0

TRUNG TÂM

Bối cảnh

Tôi đã cài đặt PHP trong Centos Docker, đây là DockerFile của tôi:

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

Ứng dụng trả về cùng một lỗi với json_decode và json_encode

Nghị quyết

Cài đặt PHP Common có json_encode và json_decode

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

Làm thế nào để tìm độ phân giải?

Tôi có một tệp Docker khác để xây dựng bộ chứa cho API và nó có thứ tự cài đặt ứng dụng khách php-mysql:

yum install php72w-mysql.x86_64 -y

Nếu tôi sử dụng những hình ảnh này để gắn kết ứng dụng, json_encode và json_decode hoạt động !! Ok ..... cái này phụ thuộc gì?

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

Đúng! Bên trong các phụ thuộc là các gói phổ biến. Tôi đã cài đặt nó vào thùng chứa khác của tôi và nó hoạt động! Sau đó, tôi đưa chỉ thị vào DockerFile, Git commit !! Thẻ Git !!!! Đẩy Git !!!! Sẵn sàng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.