本项目配置了完整的 PHP 静态代码分析工具,帮助确保代码质量和一致性。
- 触发条件: 推送到 main/master/develop 分支或创建 Pull Request
- PHP 版本: 支持 7.4, 8.0, 8.1, 8.2
- 检查工具: PHPStan, PHP_CodeSniffer, 语法检查, 基础检查
- 脚本位置:
scripts/static-analysis.sh - 功能: 语法检查, 基础检查, 安全检查
- 输出: 彩色输出,易于阅读
# 运行完整的静态分析
./scripts/static-analysis.sh
# 或者直接运行 PHP 语法检查
find src/ examples/ -name "*.php" -exec php -l {} \;如果你想在本地运行更详细的检查:
# 安装 PHPStan
wget https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar
chmod +x phpstan.phar
sudo mv phpstan.phar /usr/local/bin/phpstan
# 安装 PHP_CodeSniffer
composer global require squizlabs/php_codesniffer
# 运行 PHPStan
phpstan analyse
# 运行 PHP_CodeSniffer
phpcs --standard=PSR12 src/ examples/- PHP 语法错误
- 文件格式问题
- 基本语法验证
- PSR-12 标准
- 行长度限制(120字符)
- 命名规范
- 代码格式
- 未定义变量
- 未定义方法
- 类型错误
- 潜在问题
- 危险函数检测(eval, exec, system)
- 硬编码路径检查
- 调试代码检测
- 未闭合的引号
- 未闭合的括号
- 缺少分号
- 文件结构
parameters:
level: 3 # 检查级别 (0-9)
paths:
- src/ # 检查目录
- examples/
excludePaths:
- src/vendor/ # 排除目录
ignoreErrors: # 忽略的错误模式
- '#Call to an undefined method#'
- '#Access to an undefined property#'<ruleset name="Cloudpods PHP SDK">
<file>src/</file>
<file>examples/</file>
<rule ref="PSR12"/> <!-- PSR-12 标准 -->
<rule ref="Generic.Files.LineLength"> <!-- 行长度限制 -->
<properties>
<property name="lineLimit" value="120"/>
</properties>
</rule>
</ruleset>在 phpstan.neon 中添加 ignoreErrors 规则:
ignoreErrors:
- '#Specific error message#'在 phpcs.xml 中添加排除规则:
<exclude-pattern>*/specific-file.php</exclude-pattern>可以修改配置文件来适应项目需求:
- 调整行长度限制
- 修改检查级别
- 添加自定义规则
- 在本地运行
./scripts/static-analysis.sh - 修复发现的问题
- 提交代码
- GitHub Actions 自动检查
- 遵循 PSR-12 标准
- 避免使用危险函数
- 及时清理调试代码
- 保持代码简洁
- 定期检查分析报告
- 根据项目需求调整配置
- 培训团队成员使用工具
chmod +x scripts/static-analysis.sh确保安装必要的 PHP 扩展:
# Ubuntu/Debian
sudo apt-get install php-curl php-json php-mbstring php-openssl
# CentOS/RHEL
sudo yum install php-curl php-json php-mbstring php-openssl如果工具安装失败,可以跳过详细检查,只运行基础检查:
# 只运行语法检查
find src/ examples/ -name "*.php" -exec php -l {} \;- 在提交代码前运行静态分析
- 修复所有错误和警告
- 如果某些警告是误报,在配置中忽略
- 保持代码质量标准的连续性
通过使用这些工具,我们可以确保代码质量,减少错误,提高开发效率。