composer 2.x+ 已彻底移除对 pear 仓库("type": "pear")的原生支持,配置会直接报错“invalid repository type 'pear'”;需改用 packagist 上的兼容包(如 pear/xml_parser)或手动封装为 composer 包,通过 classmap 自动加载并置于 vendor/ 下。

Composer 没有 Pear 仓库兼容模式,也永远不会有了。从 Composer 2.0 开始,"type": "pear" 被彻底移除,任何在 repositories 中写 "type": "pear" 的配置都会直接报错 Invalid repository type "pear"。这不是配置问题,是能力已被砍掉。
为什么 composer install 会报 Invalid repository type "pear"
这个错误不是偶然触发的——它是 Composer 主动拒绝解析 PEAR 仓库的明确信号。PEAR 使用 XML 描述包(package.xml)、HTTP channel 协议、全局安装路径和 require_once 'PEAR.php' 加载逻辑;而 Composer 只认 JSON API、composer.json 元数据、vendor/ 隔离路径和 PSR-4/classmap 自动加载。两者协议层完全不互通。
常见误操作包括:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 复制旧文档里的
{"type":"pear","url":"http://pear.php.net"}到repositories,结果执行composer install就中断 - 以为加个
config.use-include-path = true就能桥接 PEAR 包——该配置在 Composer 2.x+ 中已被彻底移除,设了也无效 - 试图用
pear install装完再让 Composer 自动加载——PEAR 安装的文件不在vendor/下,Composer 根本看不到
pear/xml_parser 这类包到底怎么装
别找 PEAR 源,直接上 Packagist。像 pear/xml_parser、pear/net_url2 这些经典包,早有社区维护的 Composer 兼容版本,名字一样,但内容已重打包:
- 执行
composer require pear/xml_parser,它会装进vendor/pear/xml_parser/ - 内部已删掉所有
require_once 'PEAR.php',改用标准自动加载,类名(如XML_Parser)保持不变 - 注意 PHP 版本约束:最新版
pear/xml_parser要求PHP >= 7.4;若项目还在 PHP 5.6,得锁版本:composer require pear/xml_parser:^1.3 - 如果 Packagist 上搜不到你要的包(比如冷门的
pear/Log),那就不能“配置源”,必须手动封装
手动封装一个 PEAR 包供 Composer 使用
这是唯一可靠的兜底方案。核心是把 PEAR 包当普通 PHP 库处理,补上 Composer 认的元信息和加载规则:
- 解压原始
.tgz包(如HTTP_Request2-2.4.1.tgz),观察结构:通常含package.xml和PHP/HTTP/Request2.php这类路径 - 新建目录,复制全部 PHP 文件进去,在根目录手写
composer.json,至少包含:"name"(如"my-org/http-request2")、"autoload"(推荐"classmap": ["PHP/"],避免下划线类名踩 PSR-4 坑) - 推到私有 Git 仓库,或打 ZIP 包放内网 HTTP 服务器(如
https://files.internal/http-request2-2.4.1.zip) - 在项目
composer.json中用"type": "package"方式声明,或加vcs仓库,再composer require my-org/http-request2:2.4.1
真正麻烦的从来不是“怎么配”,而是混用两种加载模型:一边走 Composer autoload,一边又散落着裸 include 或 require_once。这类代码必须显式清理或桥接,否则升级后必崩。










