无尘阁日记

无尘阁日记

使用 PHPStan 分析 Laravel 项目中的代码质量与内存优化策略
PHPStan 的安装和基础配置
silcano

导读在分析大型 PHP 项目(如 Laravel)时,静态分析工具 PHPStan 提供了强大的代码检测功能,可帮助识别潜在问题。

在分析大型 PHP 项目(如 Laravel)时,静态分析工具 PHPStan 提供了强大的代码检测功能,可帮助识别潜在问题。然而,在分析过程中,PHPStan 可能会遇到内存不足的情况,尤其在 PHPStan 默认的内存限制(128M)不足以支持大型项目时,常导致进程中断或报告不完整。本文将详细介绍 PHPStan 的安装、配置、内存优化策略以及如何解决内存耗尽问题,帮助您更高效地完成项目代码质量分析。


一、PHPStan 的安装和基础配置

在开始分析之前,确保 PHPStan 已正确安装并配置。以下是详细步骤:

  1. 进入项目目录:在终端中导航至您的 Laravel 项目根目录。

    cd /path/to/your/laravel-project
  2. 通过 Composer 安装 PHPStan:安装 PHPStan 作为开发依赖。

    composer require --dev phpstan/phpstan
  3. 确认安装成功:安装完成后,使用以下命令检查 PHPStan 版本,以确保安装成功。

    vendor/bin/phpstan --version
  4. 创建并配置 phpstan.neon 文件:在项目根目录下创建 PHPStan 配置文件 phpstan.neon,为分析提供路径和级别设置。

    touch phpstan.neon

    配置文件示例:

    parameters:    level: max    paths:        - app        - routes        - database    excludePaths:        - tests

二、内存不足问题与解决方案

在分析大型项目时,PHPStan 有时会遇到内存不足的情况,导致无法完成分析或报错。例如,您可能会遇到以下错误信息:

Child process error: PHPStan process crashed because it reached configured PHP memory limit: 128M
Increase your memory limit in php.ini or run PHPStan with --memory-limit CLI option.

该错误表明 PHPStan 的默认内存限制不足。可以通过以下几种方法解决此问题:

方法 1:使用 --memory-limit 参数设置更高内存

直接在命令行中为 PHPStan 设置更高的内存限制。例如,将内存限制设置为 1G:

vendor/bin/phpstan analyse xyz.meedu.api --error-format=table --memory-limit=1G > phpstan_report_table.txt
  • --memory-limit=1G:将内存限制设置为 1GB。根据项目规模,可进一步调整到 2G 或更高。

  • --error-format=table:以表格格式输出报告,便于查看分析结果。

方法 2:修改 PHP 配置文件(php.ini)

如果希望永久增大内存限制,可以在 PHP 的配置文件 php.ini 中设置更高的内存限制。找到 memory_limit 配置项,修改为合适的值:

memory_limit = 1G

设置后重新启动 PHP 服务,新的内存限制将生效,PHPStan 将默认使用该内存限制运行。

方法 3:分模块分析

对于大型项目,您可以按模块逐步分析目录,例如只分析 app 目录。这不仅可以减少内存占用,还便于定位特定模块的潜在问题。示例如下:

vendor/bin/phpstan analyse app --error-format=table --memory-limit=1G > phpstan_report_table_app.txt

通过分模块分析,可以有效降低内存负担,确保分析的顺利进行。


三、获取完整分析报告

当内存限制问题解决后,PHPStan 将能够正常完成分析并生成报告。默认情况下,分析结果会显示在终端。如果希望将分析结果保存为文件,便于后续查看和分享,可以使用以下方法:

  1. 重定向终端输出:将分析结果重定向至文本文件。

    vendor/bin/phpstan analyse xyz.meedu.api --error-format=table --memory-limit=1G > phpstan_report_table.txt
  2. 生成 JSON 格式报告:使用 --error-format 参数指定 JSON 格式,适合集成到自动化流程中。

    vendor/bin/phpstan analyse xyz.meedu.api --error-format=json --memory-limit=1G > phpstan_report.json
  3. 生成表格格式报告:以表格格式生成报告,便于在文本编辑器中查看。

    vendor/bin/phpstan analyse xyz.meedu.api --error-format=table --memory-limit=1G > phpstan_report_table.txt

总结

PHPStan 是一款强大的 PHP 静态分析工具,能够有效提高 Laravel 项目的代码质量。然而在处理大型项目时,内存限制可能成为瓶颈。通过增大内存限制、分模块分析和适当配置 phpstan.neon 文件,您可以高效解决内存不足的问题,顺利完成项目的代码质量检测。希望以上优化策略能够帮助您更好地利用 PHPStan 提升项目质量,为 Laravel 项目提供更加可靠的代码支持。


prompt:


 742/742 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%


⚠️  Result is incomplete because of severe errors. ⚠️

   Fix these errors first and then re-run PHPStan

   to get all reported errors.


我删掉了配置文件,现在执行他又报了这个错误,什么意思?


 -- -----------------------------------------------------------------------------------------------------------------------------------------------------

     Error

 -- -----------------------------------------------------------------------------------------------------------------------------------------------------

     Child process error: PHPStan process crashed because it reached configured PHP memory limit: 128M

     Increase your memory limit in php.ini or run PHPStan with --memory-limit CLI option.

      while running parallel worker

     Child process error (exit code 255): PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in

     phar:///Volumes/other/video-system/meedu-main/vendor/phpstan/phpstan/phpstan.phar/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php on line 959

     Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in

     phar:///Volumes/other/video-system/meedu-main/vendor/phpstan/phpstan/phpstan.phar/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php on line 959

     PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in

     phar:///Volumes/other/video-system/meedu-main/vendor/phpstan/phpstan/phpstan.phar/src/Command/CommandHelper.php on line 122

     Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in

     phar:///Volumes/other/video-system/meedu-main/vendor/phpstan/phpstan/phpstan.phar/src/Command/CommandHelper.php on line 122

      while running parallel worker

 -- -----------------------------------------------------------------------------------------------------------------------------------------------------



 [ERROR] Found 2 errors


我打开报告看到了这个错误,请你重新帮我设计命令。

标签