phpcpd自2021年起已归档停更,推荐使用其官方phar发布版;若必须用composer,仅限php≤7.4环境锁定v4.1版本,或改用适配php 8.0+的社区替代版php-cpd。

PHPCPD 已停止维护,别用 composer require 安装
PHPCPD 自 2021 年起已正式归档(Archived),不再更新,官方仓库标记为 read-only,PHP 8.1+ 下会因依赖 sebastian/environment 旧版而直接报错。直接运行 composer require phpcpd/phpcpd 大概率失败,或装上却无法运行。
改用 phpcpd 的 PHAR 发布版(推荐)
官方仍提供可执行的 PHAR 文件,无需 Composer 依赖管理,规避版本冲突。适用于 CI/CD 或本地快速扫描:
- 下载最新版(如 v6.0.3):
wget https://github.com/sebastianbergmann/phpcpd/releases/download/6.0.3/phpcpd.phar - 赋予执行权限:
chmod +x phpcpd.phar - 运行检测:
./phpcpd.phar --min-lines=5 --min-tokens=70 ./src
--min-lines 和 --min-tokens 是关键阈值:默认 --min-lines=5 表示至少连续 5 行相同才报警;调太低会误报,太高则漏检。实际项目建议从 7 起调,再根据结果微调。
若坚持用 Composer,只能锁定旧版本 + PHP 7.4 环境
仅限遗留项目且无法升级 PHP 版本时考虑。必须同时满足:
- PHP 版本 ≤ 7.4(PHPCPD v4.x 最高支持到 PHP 7.4)
- 在
composer.json中显式指定兼容版本:"phpcpd/phpcpd": "^4.1" - 运行前清空 vendor:
rm -rf vendor && composer install,否则 Composer 可能自动升级到不兼容的 v5+
即使成功安装,v4.1 在 PHP 8.0 下会触发 Deprecated: Return type of DOMDocument::loadXML() 类警告,影响输出解析。
更现代的替代方案:php-cpd(非官方重写版)
社区维护的 php-cpd(注意包名无下划线)已适配 PHP 8.0–8.3,功能一致且修复了原版诸多 bug:
- 安装:
composer global require namshi/php-cpd(全局)或项目内composer require --dev namshi/php-cpd - 使用:
phpcpd --progress --fuzzy ./app,--fuzzy启用模糊匹配(忽略变量名、空格差异),对重构后代码更友好 - 注意:它不兼容原
phpcpd的 XML 报告格式,CI 中需调整解析逻辑
真正要落地,得先确认团队 PHP 版本和 CI 环境——PHAR 方案最稳,Composer 方案只适合钉在旧栈里不动的项目。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











