ApacheはPHP Fatal error: Call to undefined function json_decode()
をログに記録しています。いくつかのグーグルの後、それはこの問題はphpの最新バージョンを持っていないことの結果であると思われます。奇妙なことに、php --version
ouputsを実行する
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)をリストしています。
短い答え:
Sudo apt-get install php7.2-json
(または実行しているPHPバージョンに応じてphp7.1-json
またはphp5-json
)
それならもちろん必ず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拡張機能を削除し、代わりに機能的に同等な replacement extension を提供しました。
明確にするために:PHP自体はJSONを削除していません、それは まだマスターにある です。これはディストリビューション/パッケージマネージャの問題です。
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=6352
http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support
Ubuntuの場合:
Sudo apt-get install php5-json
Sudo service php5-fpm restart
phpbrew を使用している場合json拡張子を使用して未定義関数json_decodeでエラーを修正してください():
phpbrew ext install json
私は同じ質問をしています:PHP Fatal error: Call to undefined function json_decode()
、しかし私はWindows上でcygwinの下でphpを実行します。 php -m
を実行すると、jsonモジュールがインストールされていないことがわかりました。だから私はcygwin setup.exeをもう一度実行し、設定インターフェースからjsonパッケージをチェックすれば問題は解決します。
7.1と同じ問題
apt-get install php7.1-json Sudo nano /etc/php/7.1/mods-available/json.ini
モジュールはインストールされましたが、シンボリックリンクが/etc/php5/cli/conf.dにありませんでした
コアのPHPモジュールを完全に避けることも検討するかもしれません。
最近ではPHP appsのライブラリとしてguzzle jsonツールを使うのはごく普通のことです。あなたのアプリが作曲家のアプリである場合、それらを作曲家のビルドの一部として含めることは簡単です。 PHPにツールを自動インクルードするように指示した場合、ライブラリとしてのguzzleツールはjsonツールの代わりになるでしょう。
http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html
CENTOS
シーン
Centos DockerにPHPをインストールしました。これが私のDockerFileです。
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"]
アプリはjson_decodeとjson_encodeで同じエラーを返しました
解決
Json_encodeとjson_decodeを持つPHP Commonをインストールします。
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にdeディレクティブを入れてGit commit !! Git Tag !!!! Git Push !!!!準備完了