Typecho 插件安装提示缺少 ext-json 扩展,本质是当前 PHP 运行环境未加载 JSON 模块。最推荐的处理方向是根据操作系统包管理器安装 php-json 扩展,或在 php.ini 中启用该扩展,完成后必须重启 Web 服务。风险边界在于命令行 PHP 与 Web 环境 PHP 配置可能不一致,需分别验证。
先说结论:这是 PHP 环境配置缺失问题,而非 Typecho 程序故障,需针对当前 Web 服务使用的 PHP 版本进行修复。
- 先确认:使用 php -m 命令检查扩展加载状态
- 先处理:通过 apt/yum 安装或修改 php.ini 启用扩展
- 再验证:重启 PHP-FPM 或 Apache 后刷新后台页面
命令速用版
以下命令用于快速检测与安装,请根据实际操作系统选择:
# 检查扩展是否加载
php -m | grep json
# Ubuntu/Debian 安装命令
sudo apt-get install php-json
# CentOS/RHEL 安装命令
sudo yum install php-json
# 重启 Web 服务
sudo systemctl restart php-fpm为什么会这样
报错原因是 PHP 解释器在运行时无法调用 json_encode 或 json_decode 函数。PHP 8.0 及以上版本中 JSON 扩展通常已内置,但若 php.ini 中配置了 disable_functions 禁用了相关函数,或 CLI 与 Web 环境使用了不同的配置文件,仍会触发缺失报错。Typecho 及 Composer 在安装插件或依赖时会强制检查此扩展,未通过则中断操作。
分步处理
第一步:确认缺失范围。在终端运行 php -m | grep json,若无输出说明 CLI 环境缺失;若 CLI 正常但网页报错,说明 Web 环境配置未生效。
第二步:安装或启用扩展。Linux 系统优先使用包管理器安装 php-json 包;Windows 或手动编译环境需编辑 php.ini,确保存在 extension=json 且未被分号注释。PHP 8.0+ 通常无需手动添加 extension 行,但需确保未被禁用。
第三步:重启服务。修改配置后必须重启 PHP-FPM 或 Apache 服务,否则旧配置仍缓存于内存中。命令通常为 sudo systemctl restart php-fpm 或 sudo systemctl restart apache2。
怎么验证是否生效
创建 phpinfo.php 文件放入网站根目录,内容为<?php phpinfo(); ?>,浏览器访问后搜索 json 模块,确认状态为 enabled。或在终端运行 php -r "echo json_encode(['test' => 'ok']);",若输出 JSON 字符串则说明函数可用。最后回到 Typecho 后台重新尝试安装插件。
常见坑
多 PHP 版本共存时,Composer 可能调用了非 Web 服务的 PHP 版本,导致安装成功但运行报错。Alpine Linux Docker 环境中 php 包默认不带 json 扩展,需额外安装 php-json 子包。部分主机控制面板启用扩展后未重启服务,导致配置未加载。
常见问题
为什么命令行正常但网页仍报错?
因为 CLI 和 Web 服务加载了不同的 php.ini 配置文件。需检查 Web 服务实际加载的配置文件路径,并在该文件中启用扩展。
PHP 8.0 以上版本还需要安装 json 扩展吗?
通常不需要单独安装,但需检查是否被 disable_functions 禁用。若报错,优先排查配置禁用项而非安装扩展。
能否使用 ignore-platform-reqs 跳过检查?
不建议在生产环境使用。跳过检查会导致安装完成但运行时报错,应彻底解决扩展缺失问题。
参考来源
- composer 如何修复因缺少 ext-json 或 ext-mbstring 导致的安装失败
- composer 提示"requires ext-json *"报错怎么解决
- 如何解决缺少 json 扩展报错_PHP8 环境兼容性处理
- Composer 如何解决 ext 扩展缺失_Composer ext 扩展缺失解决策略
- 解决 PHP 扩展缺失错误:以 json 和 mbstring 为例