pear包需转composer兼容格式并配置autoload,不能依赖include_path;须用pear/xml_parser等命名、查packagist或配repositories;禁用require_once 'pear.php';注意网络行为与类方法差异。

PEAR包在include_path里,但composer install不加载它们
Composer默认完全无视PEAR的安装路径和include_path设置——它只认vendor/autoload.php和自己生成的类映射。老项目如果直接require 'XML/Parser.php'这种PEAR风格路径,Composer装完包也不会自动识别。
- 必须把PEAR包转成Composer可用的包名,比如
pear-xml-parser或pear/xml_parser(注意斜杠变下划线或反斜杠) - 优先查Packagist:搜索
xml_parser、pear-http等关键词,很多常用PEAR包已有社区维护的Composer镜像 - 找不到现成包?得手动写
repositories指向PEAR channel,但pear.php.net官方已停服,只能用归档镜像(如https://packagist.org/packages/pear/前缀下的部分包) - 别试图用
autoload.files硬include PEAR的System.php——PEAR的require_once逻辑和Composer的autoloader会冲突,报Class not found或重复定义
require_once 'PEAR.php'直接报错:Class 'PEAR' not found
PEAR的核心类PEAR不是独立文件,而是由PEAR installer动态注册到include_path并靠__autoload或spl_autoload_register加载的。Composer不接管这套机制,所以require_once 'PEAR.php'只是读了个空壳文件,class PEAR根本没声明。
- 删掉所有
require_once 'PEAR.php'和require_once 'XML/Parser.php'这类硬路径引用 - 改用Composer autoloading:用
use pear\XML\Parser;(如果包支持PSR-0/4)或直接调new \XML_Parser()(如果包用了classmapautoload) - 检查目标包的
composer.json里autoload字段——有些PEAR迁移包只写了classmap,没配psr-4,得按实际命名空间调用 - 临时兼容方案:在
composer.json的autoload.files里加vendor/pear/pear_exception/PEAR/Exception.php(仅限极少数必须的顶层类)
迁移后HTTP_Request等类行为异常,比如超时失效、重定向不处理
PEAR的HTTP_Request依赖运行时ini_set('default_socket_timeout', ...)和全局stream_context配置,而Composer加载的同名包(如pear/http_request)往往只做类名映射,没复现PEAR的底层上下文管理逻辑。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 别指望迁移包100%兼容——PEAR的
setOptions()参数和Composer包的构造函数参数常不一致,比如timeout可能变成connect_timeout或timeout_ms - 用
get_class_methods(new HTTP_Request())确认方法是否存在,PEAR的addHeader()在某些Composer包里叫withHeader() - 真实网络请求务必测重定向、SSL验证、cookie保持——PEAR默认跟随302,很多Composer包默认不跟,得显式设
'follow_redirects' => true - 性能上,PEAR基于
fsockopen,Composer包多用cURL或stream_socket_client,DNS解析、TLS握手行为不同,超时表现可能更“严格”
composer update时提示pear/xxx包无法解析或版本冲突
PEAR包名格式(Channel/Package)和Composer的vendor/package格式本质不兼容,Packagist不会自动转换pear.php.net/XML_Parser为合法包名,直接写会触发Could not find package。
- 正确写法是:
"pear/xml_parser": "*"或"pear/http_request": "1.4.4"(小写+下划线,版本号对齐PEAR的1.4.4而非1.4.4.0) - 如果包不在Packagist,必须加
repositories——但别用已失效的pear.php.net,改用https://packages.zendframework.com(存有部分PEAR遗产包)或直接package类型手动定义 - PEAR的
alpha/beta稳定度标记,在Composer里对应@dev或dev-master,但多数迁移包已标stable,强行加@stable反而导致找不到 - 最麻烦的是私有PEAR channel——得用
composer repo命令导出包信息,再转成package仓库,不能靠composer config加channel
PEAR到Composer不是替换路径那么简单,关键是类加载时机、全局状态依赖、以及网络层实现细节的断层。哪怕包名对上了,new XML_Parser()执行时内部调的还是PEAR的OS/Guess或Net/URL,这些没一起迁就还是会崩。










