可以禁用 ext-json 吗?
Can ext-json be disabled?
可以在 PHP 中禁用 json
扩展吗? doc 表示:
As of PHP 5.2.0, the JSON extension is bundled and compiled into PHP by default.
但是评论中有人说 json 扩展有时作为单独的包提供。
可以明确禁用 json
扩展,还是我们可以确信它始终可用?
背景:我想在我的实现JsonSerializable
的库中制作一个class,但如果不总是声明接口,那可能是一个BC break,并且图书馆突然依赖于一个并不总是可用的扩展。
PHP 8:
不,JSON 扩展 cannot be disabled anymore。
PHP 7:
是的,可以随意安装、卸载、启用或禁用任何 PHP 扩展。
json
扩展 - 尽管它无处不在 - 仍然只是一个扩展,也可以通过这种方式删除。
在某些情况下 json
扩展名可能不存在:
管理员disabled/uninstalled它:
;extension=json
安装的PHP版本是手动从源码编译的,遗漏了json
扩展名:
--disable-json
扩展被捆绑为一个单独的包;例如,在 Fedora 上,您必须显式安装 php-json
软件包。
您问题的重要部分:我们能否确信它始终可用
通常情况下,我会拒绝。尽管这种特定扩展被禁用或遗漏的情况不太可能发生,但这并不意味着它不会发生。
如果您的目标受众仅限于可能不会触及这些设置的人,那么您可能是安全的,但不能保证。
我的建议:将您的库构建为 Composer 包,并将 ext-json
声明为依赖项。这样,您可以以 Composer 包的形式提供安装说明,如果底层系统不满足您的包要求,安装将失败,用户将收到缺少扩展的警告。
可以在 PHP 中禁用 json
扩展吗? doc 表示:
As of PHP 5.2.0, the JSON extension is bundled and compiled into PHP by default.
但是评论中有人说 json 扩展有时作为单独的包提供。
可以明确禁用 json
扩展,还是我们可以确信它始终可用?
背景:我想在我的实现JsonSerializable
的库中制作一个class,但如果不总是声明接口,那可能是一个BC break,并且图书馆突然依赖于一个并不总是可用的扩展。
PHP 8:
不,JSON 扩展 cannot be disabled anymore。
PHP 7:
是的,可以随意安装、卸载、启用或禁用任何 PHP 扩展。
json
扩展 - 尽管它无处不在 - 仍然只是一个扩展,也可以通过这种方式删除。
在某些情况下 json
扩展名可能不存在:
管理员disabled/uninstalled它:
;extension=json
安装的PHP版本是手动从源码编译的,遗漏了
json
扩展名:--disable-json
扩展被捆绑为一个单独的包;例如,在 Fedora 上,您必须显式安装
php-json
软件包。
您问题的重要部分:我们能否确信它始终可用
通常情况下,我会拒绝。尽管这种特定扩展被禁用或遗漏的情况不太可能发生,但这并不意味着它不会发生。
如果您的目标受众仅限于可能不会触及这些设置的人,那么您可能是安全的,但不能保证。
我的建议:将您的库构建为 Composer 包,并将 ext-json
声明为依赖项。这样,您可以以 Composer 包的形式提供安装说明,如果底层系统不满足您的包要求,安装将失败,用户将收到缺少扩展的警告。