PhpStorm 集成 SonarScanner
在 macOS 环境下,如果不进行单元测试(Unit Test),操作会简单很多。你只需要关注 静态代码扫描(Static Analysis),它会检查代码中的 Bug、漏洞、异味(Code Smells)以及安全隐患,但不会有“代码覆盖率”这一项指标。
1. 安装 SonarScanner CLI
在 macOS 上,推荐使用 Homebrew 进行安装,这是最快捷的方式。
- 打开终端(Terminal)。
- 执行安装命令:
brew install sonar-scanner
- 验证安装是否成功:
sonar-scanner -v
2. 获取 SonarQube 服务器 Token
为了安全地将扫描结果同步到服务器,你需要一个访问令牌:
- 登录你的 SonarQube 服务器。
- 点击右上角个人头像 -> My Account -> Security。
- 在 Generate Tokens 中输入一个名字(如
mac-hyperf-scan),点击 Generate。 - 复制并保存这个 Token,稍后会用到。
3. 在 Hyperf 项目中创建配置文件
在你的 Hyperf 项目根目录下(与 app/ 文件夹同级),创建一个名为 sonar-project.properties 的文件。
# =====================================================
# 1. 项目基础信息
# =====================================================
sonar.host.url=http://13.214.186.243:9000
sonar.token=sqp_8f0721c1d8d11120d5d4927cb86b1dbd69dd5e70
sonar.projectKey=playerduo-test
sonar.projectName=playerduo-test
sonar.projectVersion=1.0.0
# =====================================================
# 2. 扫描范围与路径控制
# =====================================================
sonar.sources=app,config,bin
sonar.tests=test
sonar.test.inclusions=test/**/*.php
sonar.sourceEncoding=UTF-8
# 排除项精细化:跳过第三方库、缓存和日志
# 特别注意:runtime/** 必须排除,因为 Hyperf 的代理类会干扰逻辑分析
sonar.exclusions=vendor/**,runtime/**,storage/**,public/**,test/**,*.log,*.xml,*.json,database/migrations/**
sonar.cpd.exclusions=database/migrations/**
# =====================================================
# 3. PHP 深度分析与外部报告集成
# =====================================================
# 集成 PHPStan 报告,解决 IDE 报错但在 Sonar 没显示的问题
sonar.php.phpstan.reportPaths=phpstan-report.json
# 如果后续有单元测试,取消下方注释并指向 clover.xml
# sonar.php.tests.reportPath=report/clover.xml
# sonar.php.coverage.reportPaths=report/clover.xml
# 暂时屏蔽覆盖率统计,避免显示 0% 导致质量门禁不通过
sonar.coverage.exclusions=**/*
# =====================================================
# 4. 性能与限速优化
# =====================================================
# 增加扫描时的超时限制
sonar.scanner.socketTimeout=300
# 建议给扫描器分配 4-6 个线程以加速分析
sonar.analyzer.workerCount=6
4. 执行全量扫描
方案1「推荐」:Makefile
在项目根目录创建一个 Makefile。它能完美处理复杂的命令链、忽略特定错误码。
.PHONY: analyze
# 定义变量
PHP_BIN = php -d xdebug.mode=off
PHPSTAN = ./vendor/bin/phpstan
SONAR = sonar-scanner
MEMORY_LIMIT = 2G
analyze:
@echo "开始 PHPStan 逻辑检查..."
# 使用 - 前缀忽略错误退出,确保即使 PHPStan 发现 Bug,也能执行下一步的 Sonar 扫描
-$(PHP_BIN) $(PHPSTAN) analyse app --memory-limit=$(MEMORY_LIMIT) --error-format=json > phpstan-report.json
@echo "PHPStan 扫描完成,报告已生成。"
@echo "开始上传至 SonarQube 控制台..."
$(SONAR)
@echo "分析任务全部完成!请登录看板查看结果。"
使用方法: 以后在终端只需输入 make analyze。
方案2:Composer Script 适配
如果你更倾向于使用 composer.json,可以利用 || true 来强制跳过错误码中断:
"scripts": {
"analyze": [
"php -d xdebug.mode=off ./vendor/bin/phpstan analyse app --memory-limit=2G --error-format=json > phpstan-report.json || true",
"sonar-scanner"
]
}
5. 在服务器查看结果
- 命令执行完毕后,终端会显示
EXECUTION SUCCESS。 - 打开 SonarQube 网页端,刷新项目列表。
- 你会看到新生成的项目报告。虽然没有单元测试覆盖率数据,但你会看到:
- Bugs: 潜在的逻辑错误。
- Vulnerabilities: 安全漏洞(如 SQL 注入风险)。
- Code Smells: 代码规范问题(如过长的类、未使用的变量)。
- Duplications: 重复代码块。