本文目录导读:

在 PHP 中,“包分析”通常指对项目依赖的 Composer 包进行深度分析,比如查看包的内部结构、依赖关系、版本冲突、代码质量等。
以下我整理了几种常见的 PHP 包分析场景及其对应的工具和方法:
依赖关系分析 (最常用)
检查 “composer.json” 中定义的依赖,以及它们的子依赖。
-
composer show --tree(命令行) 这是最直接的内置方式,可以查看依赖树。# 查看所有依赖树 composer show --tree # 查看某个特定包的依赖树 (如 laravel/framework) composer show --tree laravel/framework
输出示例(层级关系非常清晰):
vendor/package 1.0.0 ├── symfony/console 5.4.x │ ├── symfony/polyfill-php80 │ └── symfony/service-contracts └── monolog/monolog 2.0 └── psr/log -
composer depends(反向依赖分析) 想知道“哪个包依赖了我当前这个包?”composer depends monolog/monolog # 输出: php-fig/log 依赖于 monolog
版本冲突与问题分析
-
composer why-not(升级冲突诊断) 如果你想把某个包升级到0版本,但不确定会不会破坏现有依赖,用这个:composer why-not vendor/package 2.0
它会列出所有阻止你升级的包及其要求的版本。
-
composer check-platform-reqs检查 PHP 版本或扩展是否符合包的要求(例如某个包要求ext-json,但你没安装)。composer check-platform-reqs
代码质量与结构分析 (深度扫描)
不仅仅看元数据,而是直接分析包的源代码。
-
PHPStan / Psalm (静态分析) 虽然常用于项目代码分析,但你可以针对
vendor目录中的某个特定包运行它,查看该包是否会产生潜在的错误。# 分析某个包的 src 目录 (需要有 phpstan 配置文件) vendor/bin/phpstan analyse vendor/package/src --level=max
-
PhpMetrics (代码复杂度/结构分析) 生成 HTML 报告,包含包的圈复杂度、依赖关系图、类的结构等。
composer require --dev phpmetrics/phpmetrics vendor/bin/phpmetrics --report-html=metrics vendor/package/
-
Composer Package Analyzer (在线/API) 第三方网站 Packagist.org 本身提供了包的元数据信息(下载量、Stars等),而 Packagist Semver Checker 可以检查包的版本约束是否被正确满足。
安全检查
分析包是否存在已知漏洞。
-
composer audit(Composer 2.4+ 内置) 这是目前最简单、最权威的安全分析工具。composer audit
它会检查
composer.lock中的所有包,并对照 FriendsOfPHP/security-advisories 数据库进行比对。 -
Local PHP Security Checker (旧称 Enlightn) 一个轻量级 CLI 工具,专门扫描
composer.lock文件。# 下载并运行 ./local-php-security-checker
包使用情况分析 (在项目代码中)
想知道项目代码中真实用到了哪些包?或者某个包的哪些函数被调用了?
-
bamarni/composer-bin-plugin/qossmic/deptrac(架构约束)Deptrac可以强制规定代码的依赖方向(业务层不能直接依赖基础设施层”),但它也能帮你分析出未被使用的包。 -
手动 / 代码搜索 虽然没有完美的自动化工具,但可以通过正则搜索
use Vendor\Package在src/目录下的出现频率,来判断一个包是否真实被依赖。
不同目的的建议
| 分析目的 | 推荐工具 | 一句话说明 |
|---|---|---|
| 依赖树 | composer show --tree |
快速查看谁依赖谁。 |
| 升级冲突 | composer why-not |
帮你解决版本锁定的问题。 |
| 安全漏洞 | composer audit |
必备!上线前必跑。 |
| 代码质量 | PHPStan/PhpMetrics |
深度分析包的内部实现。 |
| 架构合规 | Deptrac |
分析包是否符合分层架构。 |
初学者建议先从 composer show --tree 和 composer audit 开始,这基本能覆盖大部分日常分析需求。