PHP质量工具系列之phpmd

PHPMD PHP Mess Detector

它是PHP Depend的一个衍生项目,用于测量的原始指标。

PHPMD所做的是,扫描项目中可能出现的问题如:

  • 可能的bug
  • 次优码
  • 过于复杂的表达式
  • 未使用的参数、方法、属性

PHPMD是一个成熟的项目,它提供了一组不同的预定义规则

安装

shell 复制代码
composer global require --dev phpmd/phpmd

使用

shell 复制代码
phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit

参数介绍:

格式固定为 phpmd 被扫描目录 输出格式 规则集文件或规则名称(多个规则名称以逗号分隔)

后面的参数全部是option

--report-file 结果输出文件地址

--ignore-errors-on-exit phpmd发生错误时也以0码退出脚本

--ignore-violations-on-exit phpmd扫描出问题时也以0码退出脚本 主要用在自动构建的场景终止,避免打断整个项目的执行

--suffixes "php,phtml" 有效源代码文件扩展名,多个以逗号隔开

--exclude 需要忽略的目录,多个以逗号隔开

自定义规则集

复制以下内容,保存为phpmd.xml到项目,phpmd第三个参数即可使用此配置

xml 复制代码
<?xml version="1.0"?>
<ruleset name="Custom Ruleset">
    <description>Custom rules for PHPMD</description>

    <rule ref="rulesets/cleancode.xml">
        <exclude name="StaticAccess"/>
        <exclude name="ElseExpression"/>
    </rule>
    
    <rule ref="rulesets/codesize.xml"/>
    
    <rule ref="rulesets/controversial.xml">
        <exclude name="Superglobals"/>
    </rule>
    
    <rule ref="rulesets/design.xml"/>

    <rule ref="rulesets/naming.xml">
        <exclude name="ShortMethodName"/>
        <exclude name="ShortVariable"/>
    </rule>
    
    <rule ref="rulesets/unusedcode.xml"/>
</ruleset>

结果查看

此图是利用jenkins中的插件warnings可视化的

Jenkins中的应用

构建步骤新增执行shell

shell 复制代码
#执行phpmd
if `docker exec phpfpm82 /tmp/composer/vendor/bin/phpmd >/dev/null 2>&1`; then
  echo '开始执行pdepend'
else
  docker exec phpfpm82 composer global require --dev phpmd/phpmd
fi

docker exec phpfpm82 /bin/sh -c "cd /var/www/workspace/$JOB_NAME/ && /tmp/composer/vendor/bin/phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit"

输出可视化报告

查看jenkins插件之Warnings的 phpmd一章

看到这里了,点个赞再走吧

PHP质量工具系列

PHP/JS质量工具,安全工具,Jenkins插件 总结
TOP 6 PHP代码质量工具
PHP质量工具系列之php-depend
PHP质量工具系列之phpmd
PHP质量工具系列之phpcpd
PHP质量工具系列之phploc
PHP质量工具系列之paslm
PHP质量工具系列之phpstan
PHP质量工具系列之Owasp dependency-check
PHP质量工具系列之php_codesniffer
PHP质量工具系列之phpunit
PHP质量工具系列之xhprof
SBOM生成之CycloneDX

CI/CD之Jenkins插件使用系列

jenkins插件之Jdepend
jenkins插件之plot
jenkins插件之dependency-check
jenkins插件之Warnings
jenkins插件之xunit

相关推荐
程序喵大人13 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng13 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
wdfk_prog14 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
晴空了无痕14 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
神明不懂浪漫14 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通15 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦16 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
qq_25183645717 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长17 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
FoldWinCard17 小时前
D6 Python 基础语法 --- 保留关键字
开发语言·python