在 Debian 上用 PhpStorm 做代码分析
一 环境准备与 PHP 解释器配置
- 安装 PHP 与常用工具(按需选择版本号,如 8.2):
- sudo apt update
- sudo apt install php php-cli php-xdebug
- 在 PhpStorm 设置解释器:
- 打开 File → Settings → Languages & Frameworks → PHP,点击 CLI Interpreter 右侧齿轮,选择 Add → Path,指向 /usr/bin/php。
- 确认 xdebug 已加载:php -m | grep xdebug;若未加载,检查 /etc/php/ 下对应 cli/apache2/fpm 的 ini 是否包含 zend_extension=xdebug.so。
二 静态代码分析 内置检查器与质量工具
- 内置代码检查(无需运行):
- 在 Settings → Editor → Inspections → PHP 勾选需要的检查项(如未使用变量、可能的错误、代码风格等),保存后在编辑器中即可实时高亮问题。
- PHPStan(推荐,渐进式严格):
- 安装:composer require --dev phpstan/phpstan
- 运行分析:vendor/bin/phpstan analyse --level=max src
- 在 PhpStorm 中配置外部工具或 File Watchers,保存即自动运行;或在 Settings → Tools → External Tools 添加命令,使用快捷键执行。
- Psalm(可选,与 PHPStan 二选一或并用):
- 安装:composer require --dev vimeo/psalm
- 初始化:vendor/bin/psalm --init
- 运行分析:vendor/bin/psalm
- PHP_CodeSniffer(风格与规范):
- 安装:composer require --dev squizlabs/php_codesniffer
- 检查:vendor/bin/phpcs --standard=PSR12 src
- 自动修复:vendor/bin/phpcbf --standard=PSR12 src
- 将以上工具集成到 PhpStorm 的 External Tools 或 File Watchers,可做到保存即分析、一键批量分析,并在 Problems 工具窗口统一查看与跳转。
三 动态分析 Xdebug 断点调试与性能剖析
- 配置 Xdebug(以 Xdebug 3 为例,适用于 CLI/FPM/Apache):
- 编辑对应环境的 php.ini(如 /etc/php/8.2/apache2/php.ini 或 /etc/php/8.2/fpm/php.ini):
- zend_extension=xdebug.so
- xdebug.mode=debug
- xdebug.client_host=127.0.0.1
- xdebug.client_port=9003
- xdebug.start_with_request=yes
- xdebug.idekey=PHPSTORM
- 重启服务:
- Apache:sudo systemctl restart apache2
- PHP-FPM:sudo systemctl restart php8.2-fpm
- Nginx+PHP-FPM:sudo systemctl restart nginx && sudo systemctl restart php8.2-fpm
- PhpStorm 调试设置:
- Settings → PHP → Debug:确认 Debug port=9003。
- Settings → PHP → Servers:新增服务器,填写 Host/Port,勾选 Use path mappings 并映射本地项目路径与服务器路径。
- 开始调试:
- 在代码行号左侧设置断点;点击工具栏 Start Listening for PHP Debug Connections(电话听筒图标)或按 Shift+F9。
- 浏览器访问对应页面触发断点,PhpStorm 将进入调试视图,可查看变量、调用栈并单步执行。
- 远程服务器场景:
- 将 xdebug.client_host 设为 IDE 所在机器的 IP,并确保网络可达;必要时开放防火墙端口 9003。
四 常见问题与排查
- 端口被占用:
- 查看占用:ss -lntp | grep 9003;更换 xdebug.client_port 并同步 PhpStorm 的 Debug port。
- 断点不生效:
- 确认 xdebug.mode=debug 且 start_with_request=yes;Web 场景需开启 Start Listening;CLI 场景可直接运行脚本并在 PhpStorm 以调试方式执行。
- 路径映射错误:
- 在 Servers 中正确设置本地与服务器目录映射,否则断点无法命中或变量不可读。
- 远程调试连不上:
- 核对 client_host 为 IDE 的 可达 IP,服务器防火墙/安全组放行 9003,必要时改用 SSH 隧道转发端口。