可以在PHP中禁用json
扩展名吗? doc说:
从PHP 5.2.0开始,JSON扩展默认捆绑并编译为PHP。
但是评论中的某些人说,json扩展有时是作为单独的软件包提供的。
可以明确禁用json
扩展名,还是我们可以确信它始终可用?
背景:我想在我的工具JsonSerializable
的库中创建一个类,但是如果不总是声明该接口,那可能是BC中断,并且库突然依赖于一个并不总是可用的扩展。
是,可以随意安装,卸载,启用或禁用任何PHP扩展。
json
扩展名-尽管无处不在-仍然只是扩展名,也可以通过此configure
选项以这种方式删除:
--disable-json
[在某些情况下,json
扩展名可能不存在:
json
扩展名被省略了您问题的重要部分:我们能否确信它始终可用
通常,我会拒绝。但是,不太可能出现此特定扩展名被禁用或被忽略的情况,但这仍然并不意味着它不会发生。
如果您的目标受众仅限于可能不会使用这些设置的人,那么您[[可能是安全的,但不能保证。
我的建议:将您的库构建为Composer程序包,并声明ext-json
作为依赖项。这样,您可以将安装说明作为Composer软件包提供,并且如果基础系统不满足您的软件包要求,则安装将失败,并且将向用户发出有关缺少的扩展名的警报。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
时。