Composer安装:缺少json扩展

12

我在Linux终端中输入了以下命令:curl -s https://getcomposer.org/installer | php 系统返回如下信息:

 #!/usr/bin/env php
Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:

The json extension is missing.
Install it or recompile php without --disable-json

我执行了以下操作:apt-get install php5-json,所以我认为已经安装了。但奇怪的是,当我输入 php -m 时会给我一个没有 json 的列表:

[PHP Modules]
bcmath
bz2
calendar
Core
ctype
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gettext
hash
iconv
libxml
mbstring
mhash
openssl
pcntl
pcre
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

当我输入 php5-fpm -m 时,它会输出如下内容:

[PHP Modules]
bcmath
bz2
calendar
cgi-fcgi
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mhash
mysqli
openssl
pcre
PDO
pdo_mysql
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

我做错了什么?我在GitHub和Google上都没有找到解决方案。


愚蠢的问题:你重启了服务器,是吗? - Damien Pirsy
是的,我做了。不幸的是,它没有起到帮助的作用。 - anindis
7个回答

10

我遇到了相同的错误,但是不同的是当我运行 php -m 命令时,json 模块没有列出来,所以我只需使用以下命令安装 json PHP 模块:

sudo yum install php-json

错误已经修复,我成功安装了composer。我使用的是CentOS 8 stream和PHP7.2。


7

您可能需要在 php.ini 文件中启用该扩展。要找出命令行 PHP 的位置,请执行以下操作:

php --ini

您应该看到一行类似于:

已加载的配置文件:/path/to/php.ini

打开该文件并查找 extension=json.so。如果存在,请取消注释。如果不存在,请添加。现在当您运行 php -m 时,应该能看到 json 已列出,并且 composer 应该可以正常工作。


在我的情况下,我运行的命令行php可执行文件显然不是我想象中的那个 - 我刚刚在Windows上安装了PHP,并从cygwin运行命令,而其中一个较旧的版本的PHP也已安装。 - Brian Lacy
这在 PHP 7 中不适用。 - Jay Bienvenu

3

PHP Bug未加载扩展安装

创建php.ini文件

# /etc/php/7.2/cli/conf.d/php.ini
extension=json.so
extension=phar.so
extension=iconv.so

0
    $client->transfers->create(
    [
        "targetAccount" => "account id",
        "quoteUuid" => "generated quote id",
        "customerTransactionId" => "transaction id",
        "details" => [
            "reference" => "Company X",
            "transferPurpose"=> "verification.transfers.purpose.pay.bills",
            "sourceOfFunds"=> "verification.source.of.funds.other"
        ]
    ]
);

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
在Centos 8上使用PHP 7.2,经过全面的研究,我得出结论,唯一可靠的解决方法是重新安装最新版本的PHP。(对我来说,7.4是最新版本)在这里,您可以找到其他人分享相同的结论; laracasts

0
在我的Ubuntu 14.04上,我发现php.ini文件的默认权限位于/etc/php5/cli/,仅限于Root用户访问。因此,如果您运行以下命令:
php -m

作为非root用户,您获得的模块比运行sudo php -m要少得多。

我的解决方法是执行:

sudo chmod a+rx /etc/php5/cli/* -R 

这将授予每个人对该文件夹及其内容的读取和执行权限。


0

你可以使用以下命令:

sudo apt-get install php-json

并且纠正目录,这样你的错误就会得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接