可以禁用ext-json吗?

问题描述 投票:1回答:2

可以在PHP中禁用json扩展名吗? doc说:

从PHP 5.2.0开始,JSON扩展默认捆绑并编译为PHP。

但是评论中的某些人说,json扩展有时是作为单独的软件包提供的。

可以明确禁用json扩展名,还是我们可以确信它始终可用?


背景:我想在我的工具JsonSerializable的库中创建一个类,但是如果不总是声明该接口,那可能是BC中断,并且库突然依赖于一个并不总是可用的扩展。

php php-extension
2个回答
1
投票

是,可以随意安装,卸载,启用或禁用任何PHP扩展。

json扩展名-尽管无处不在-仍然只是扩展名,也可以通过此configure选项以这种方式删除:

--disable-json

[在某些情况下,json扩展名可能不存在:

  1. 管理员禁用/卸载了它。
  2. 已安装的PHP版本是从源代码手动编译的,json扩展名被省略了

您问题的重要部分:我们能否确信它始终可用

通常,我会拒绝。但是,不太可能出现此特定扩展名被禁用或被忽略的情况,但这仍然并不意味着它不会发生。

如果您的目标受众仅限于可能不会使用这些设置的人,那么您[[可能是安全的,但不能保证。

我的建议:将您的库构建为Composer程序包,并声明ext-json作为依赖项。这样,您可以将安装说明作为Composer软件包提供,并且如果基础系统不满足您的软件包要求,则安装将失败,并且将向用户发出有关缺少的扩展名的警报。

0
投票
一个可以检查扩展的功能是否存在:

if(function_exists('json_encode')) { /* this branch might be the case on almost all servers */ } else { /* fall back or demand the extension to be installed */ }

或者,我建议在composer.json中将其声明为依赖项,这可能是最常见的方式,当库需要特定的扩展名时,该扩展名不是核心PHP的一部分(只是看到另一个答案表明相同-可能是因为它很常见)。

甚至不需要从源代码构建来禁用它;取消引用;extension=json.so时。

© www.soinside.com 2019 - 2024. All rights reserved.