CentOS下安装PHP Microsoft Graph API避免移除已装包及报错解决
1. 已有包被移除的原因
执行composer require microsoft/microsoft-graph时,Composer会自动解析并更新整个项目的依赖树。如果Microsoft Graph的依赖版本与你已安装的sendgrid、starbank等包的依赖存在版本冲突,Composer为了满足新包的依赖要求,会自动卸载存在冲突的旧包,以保证依赖树的一致性。
2. Guzzle类找不到的原因
使用composer require microsoft/microsoft-graph --no-update时,该命令仅将Microsoft Graph的依赖条目添加到composer.json中,但不会实际下载或更新任何依赖包。而GuzzleHttp\Client是Microsoft Graph的核心依赖之一,此时并未被安装,因此运行代码时会提示类找不到的错误。
步骤1:恢复被移除的现有包
如果项目还保留着原来的composer.lock文件,直接执行以下命令即可恢复所有之前安装的包:
composer install
若composer.lock已丢失,手动重新安装需要的包:
composer require sendgrid/sendgrid starbank/[对应包名]
步骤2:安全安装Microsoft Graph且保留现有包
方法A:让Composer自动解决兼容版本
执行以下命令,让Composer尝试寻找与现有所有包兼容的Microsoft Graph版本,并自动处理依赖:
composer require microsoft/microsoft-graph --update-with-all-dependencies
该命令会更新依赖树,但优先保证所有包的兼容性,不会随意卸载现有包(若存在无法解决的冲突,Composer会明确提示冲突信息)。
方法B:指定兼容的Microsoft Graph版本
如果Composer提示版本冲突,可根据给出的冲突信息,手动指定一个与现有包依赖兼容的Microsoft Graph版本。例如:
composer require microsoft/microsoft-graph:^4.0
(版本号需根据实际冲突提示调整)
步骤3:验证安装并测试代码
安装完成后,执行以下命令确保所有依赖都已正确加载:
composer dump-autoload
之后再运行测试文件a.php,GuzzleHttp\Client即可被正常识别。
CentOS环境下Composer的运行逻辑与其他Linux发行版一致,只需确保PHP版本满足Microsoft Graph的要求(目前主流版本要求PHP >= 7.4),并拥有足够的文件权限操作vendor目录。
内容的提问来源于stack exchange,提问作者George Joffin Joy

