PHPSTORM+Xdebug+PHP
本篇文章,主要关于如何使用 PHP
的 Xdebug
扩展来对代码进行调试,使用 PHPStorm
。
涉及两种情况:
- 运行环境在本地局域网内(非本机)
- 运行环境在外网(公网)
参考文章:
可能是全网最详细的PhpStorm+xdebug远程调试php代码的教程
Xdebug 远程调试,你会用吗?
Debug原理
Xdebug
与 PHPStorm
建立连接的过程。
统一的配置
下面是一些统一的配置。
服务器
配置 php.ini
,下面各配置项的具体含义可翻阅参考文章或官方文档,此处仅做展示。
zend_extension=xxx
xdebug.client_port=9001
xdebug.mode=debug //必须填debug模式
xdebug.idekey=PHPSTORM
PHPStorm
IDE
的配置分为两个部分,如图,参考文章内的介绍实测可用。
这里需要注意的是 Use path mappings
,需要保证本地的代码和服务器上的代码完全一致。
运行环境在本机局域网内(非本机)
除了统一配置之外,针对局域网环境的 php.ini
配置。
xdebug.discover_client_host=on
运行环境在外网(非局域网或公网)
xdebug.client_host=127.0.0.1 //必须是127.0.0.1 或者 localhost
公网相比于局域网有一些特殊,在于本机(也就是 PHPStorm
)的定位问题,通过 IP
无法定位到本机,也就无法和 PHPStorm
建立连接,这里需要用到 SSH
的隧道转发,如何配置,参考文章里列举了两种不同的设置方式,包括如何检验是否配置OK。
使用注意点
php.ini
配置修改之后,要重启php-fpm
phpstorm
开启debug
的顺序
开启之前
正常开启之后,可以看到小图标的状态发生了变化- 配置
servers
时要注意mapping
,确保本机和服务器的代码一致(使用git
或者ftp
较方便),以免找不到代码 - 服务器端口放开,需要检查安全组以及防火墙(
selinux
,firewalld
,iptables
) - 触发
debug
只需要在请求链接后加?XDEBUG_SESSION_START=xxx(随意填写)
,或者是在cookie
中设置DEBUG_SESSION=xxx(随意填写)
。都可以触发debug
。
changelog
20211118
碰到了 mapping
问题,按照前面的步骤全部弄妥当之后,发起请求依然无法正常 debug
。如果正常监听,发起请求之后,phpstorm
右下角会有一个 warning
的弹窗提示,提示文件 mapping
设置存在问题,可以开启 Run->Break at file line in PHP scripts
从脚本的第一行开始 debug
。mapping
除了根目录匹配之外,还需要配置 index.php
,vendor
以及你需要 debug
的文件目录。
本作品采用《CC 协议》,转载必须注明作者和本文链接