PHP 怎么PHP 包分析

wen PHP项目 2

本文目录导读:

PHP 怎么PHP 包分析

  1. 依赖关系分析 (最常用)
  2. 版本冲突与问题分析
  3. 代码质量与结构分析 (深度扫描)
  4. 安全检查
  5. 包使用情况分析 (在项目代码中)
  6. 不同目的的建议

在 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\Packagesrc/ 目录下的出现频率,来判断一个包是否真实被依赖。

不同目的的建议

分析目的 推荐工具 一句话说明
依赖树 composer show --tree 快速查看谁依赖谁。
升级冲突 composer why-not 帮你解决版本锁定的问题。
安全漏洞 composer audit 必备!上线前必跑。
代码质量 PHPStan/PhpMetrics 深度分析包的内部实现。
架构合规 Deptrac 分析包是否符合分层架构。

初学者建议先从 composer show --treecomposer audit 开始,这基本能覆盖大部分日常分析需求。

抱歉,评论功能暂时关闭!