PHPの致命的なエラー:未定義の関数json_decode()の呼び出し


165

ApacheがロギングしていPHP Fatal error: Call to undefined function json_decode()ます。グーグルで検索した後、この問題は最新バージョンのphpがないために発生したようです。奇妙なことに、実行中のphp --version出力

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

私のphpバージョンがより大きいことを明確に示してい5.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_functionsiniディレクティブをチェックしてjson_decode、そのリストにあるかどうかを確認します
Orangepill

jsonモジュールはphpinfo()の出力に表示されますか?
tcmitche 2013

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にはパッケージがありますphp-services-json。多分これは役立つ...
jgb '14

1
@jgbそれはPEARパッケージServices_Jsonです。これも非常に包括的であり、JSONだけでなく、少しJavascriptも解析します。しかし、直接再実装する他のユーザーランド実装がありますjson_decode
マリオ2013

回答:


354

Ubuntuを使用していますか?

短い答え:

sudo apt-get install php7.2-json

(またはphp7.1-jsonphp5-json実行しているPHPバージョンに応じて)

それからもちろん、Apacheを必ず再起動してください

sudo service apache2 restart

または、PHP-FPMを使用している場合:

sudo service php7.2-fpm restart

(またはphp7.1-fpmまたはphp5-fpm

説明

Debianは、ライセンスの競合のため、PHP 5.5rc2の時点で以前のJSON拡張を削除しました。

JSONライセンスは述べ句があります。

ソフトウェアは悪ではなく善のために使用されるものとします。

これは、Free Software Foundationのフリーソフトウェアの定義に問題を引き起こします。

あらゆる目的でプログラムを実行する自由(自由0)。

FSFはさらに、JSONライセンスをnonfreeとして具体的にリストしています

はい、それは少しばかげているようです。それにもかかわらず、Debianは非準拠のJSON拡張を削除し、代わりに機能的に同等の代替拡張を提供しました。

明確にするために、PHP自体はJSONを削除しておらず、まだmasterにあります。これはディストリビューション/パッケージマネージャーの問題です。

ラスムスはそれをかなり明確にします:

私たちはjsonを削除しておらず、jsonサポートが組み込まれていないバージョンのphpをリリースすることは決してありません。5.5での変更は、私たちが制御できない、使用しているディストリビューションパッケージによるものです。

もっと詳しく

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 2013

2
5.5.3にもない(Ubuntu 13.10)
Luis Lobo Borobia 2013年

9
Chrisが言及したコマンドでjsonモジュールをインストールした後、Apacheを再起動することを忘れないでください。
Pavel

1
php-jsonがphp-commonの依存関係であった場合、これはすべてなくなります... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ...これが問題だった場合は投票してください。
rickfoosusa

20
このソフトウェアライセンスの除外により、1時間の調査時間が費やされたことは皮肉なことに「悪」だと誰もが思いますか?
recursion.ninja 2014年

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; サービスapache2開始
xilef 2014年

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を新しいファイルに追加します
  • conf.dの下に適切なsymリンクを追加します
  • apache2サービスを再起動します(必要な場合)

2

同じ質問があります:がPHP Fatal error: Call to undefined function json_decode()、Windowsのcygwinでphpを実行しています。を実行するとphp -m、jsonモジュールがインストールされていないことがわかりました。そこで、cygwin setup.exeをもう一度実行し、構成インターフェースからjsonパッケージを確認すると、問題が解決します。


1

モジュールはインストールされましたが、シンボリックリンクが/etc/php5/cli/conf.dにありませんでした


0

コアPHPモジュールを完全に回避することも検討してください。

最近、PHPアプリでguzzle jsonツールをライブラリとして使用することはごく一般的です。アプリがcomposerアプリである場合、それらをcomposerビルドの一部として含めることは簡単です。ライブラリとしてのguzzleツールは、PHPにツールを自動インクルードするように指示した場合、jsonツールのターンキーの代替になります。

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

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


Guzzleのjson_decodeは、追加のエラーチェックを伴うphpのjson_decode使用しているため、答えは無効です
emix

0

セントス

シーン

Centos DockerにPHPをインストールしました。これは私の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で同じエラーを返しました

解決

json_encodeとjson_decodeを持つPHP Commonをインストールします。

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

解決策を見つける方法は?

APIのコンテナーを構築する別のDockerファイルがあり、php-mysqlクライアントをインストールする順序があります。

yum install php72w-mysql.x86_64 -y

これらのイメージを使用してアプリをマウントすると、json_encodeとjson_decodeが機能します!! OK .....これにはどのような依存関係がありますか?

[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にdeディレクティブを入れ、Git commit !! Gitタグ!!!! Git Push !!!! いいよ!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.