本篇教程是我综合了多篇教程综合而成的产物,每篇教程都会有一些小细节没有写到,折腾了好久终于是整出来了...现在在这里做个记录,也是给后来人避一下坑,先讲一下远程debug的原理:(本段来自:可能是全网最详细的PhpStorm+xdebug远程调试php代码的教程 | Bruce's Blog (xiebruce.top),有改动)

1、IDE(比如phpstorm)中已经集成了一个遵循DBGp协议的Xdebug插件,当点击IDE上的监听按钮(像电话形状的按钮)时,IDE就会在本地监听指定的端口(端口号可配置);
2、点击IDE上的debug按钮(即小虫子按钮),则会自动在浏览器打开配置好的链接,并自动添加XDEBUG_SESSION_START=xxx这样的一个参数;(以GET,POST或者cookie的形式)
3、由于有XDEBUG_SESSION_START参数,而xdebug是php的扩展,所以xdebug会接收到这个参数并开启debug功能,然后xdebug会通过DBGp协议向xdebug配置中指定的ip和端口(在php.ini中指定该ip该端口)发送一个请求,(这里需要使用SSH隧道进行端口映射,如果想详细了解建议看这一篇文章:SSH端口转发(SSH隧道) | Bruce's Blog (xiebruce.top))而IDE刚好在监听该端口,所以IDE能接收到xdebug的请求,此时xdebug与IDE之间会建立连接(使用DBGp协议通讯),并且IDE会把断点信息发送给xdebug;
4、xdebug收到了断点信息后,就知道运行到哪一行时需要停止并把debug数据返回给IDE,IDE接收到debug数据就会在IDE中显示出来,于是我们就能看到debug数据;
5、当我们点击IDE上的debug按钮(例如step over, step into, step out)时,IDE又会把这个指令发送给xdebug(通过DBGp协议),xdebug接收到后,就知道应该要step over、step into还是step out等等,并且把执行结果返回给IDE,如此往复。

下面开始介绍主要过程:

首先是远程服务器上下载xdebug,教程参见:php多版本分别利用源码安装扩展 - yink's studio (yinkstudio.xyz)

然后在php.ini里面进行配置,把这一段加到php.ini最后

[xdebug]
zend_extension=xdebug.so
;扩展so文件路径
xdebug.idekey=PHPSTORM
;自定义的idekey
xdebug.discover_client_host = Off
;如果开启此,将忽略下面的 xdebug.remote_host 的参数
xdebug.client_host="127.0.0.1"
;注意这里是,客户端的ip<即IDE的机器的ip,不是你的web server>
xdebug.mode=profile,trace,debug
;开启xdebug模式
;xdebug.start_with_request=yes
;这一行代表开启自动调试,我在这里注释掉了,这样就可以利用xdebug插件自由控制什么时候需要debug
;想要开启取消注释即可
xdebug.client_port = 9001
;注意这里是,客户端的端口<即IDE的机器的ip,不是你的web server,这是在phpstorm里面自定义的>
xdebug.remote_handler = dbgp
;固定填dbgp(因为目前只支持这个协议,也只有这个协议)
xdebug.log = /tmp/xdebug.log
;日志路径

添加完成后,重启php,再看phpinfo,里面会多出来xdebug的选项

然后开始配置本地,phpstorm全局配置,这里debug port我改成了9001,为了不跟php-fpm的默认端口冲突

进入项目,看一看是否监听成功,点击右上角的电话符号

然后在本机的cmd下使用命令:

netstat -ano | findstr "9001"

来查看结果

然后添加server,进行路径映射和代码同步,别忘了勾选Use path mappings,然后把你想要映射的本地目录和远程目录写好

接下来,进行代码同步,先进入Configuration

把SSH和url配好,这里的url就是你要访问的网站地址,主要用于之后在php remote debug配置的时候做Validate验证,看配置是否成功。我这里已经配好了SSH,如果还没有配好,点击SSH configuration后面的三个点按钮,进入配置页面,把选好Host,username和认证方式,用Test connection检查一下是否配置成功,OK确认

再进入Mappings做路径映射,在Deployment path里面选择你想映射到本地的文件夹(点右边的文件夹符号可以选,注意只有本地有备份的网站目录才能够被调试)

别忘了最后点击√,设置为默认服务器(不选中无法进行同步)

一段时间后配置好了,接下来进行同步,点击Options(这一步可以在全局设置里进行,这样就不用每一次新建一个项目都要配一次了)

选择ctrl+s保存的选项,这样你在本地做的修改只需要用ctrl+s就可以直接上传

接下来下载代码,本地有代码备份才能设置断点(给远程服务器返回断点信息,注意本地和远程的代码要同步)

下载之后,配置SSH隧道,可以用Xshell配置(服务器上端口随便写,本地端口必须与你前面设置的debug port一致),不过需要建立连接,一段时间不操作会断掉

我个人喜欢用ssh指令手动端口映射,命令:

ssh -F -N -R <your-port>:localhost:<server-port> <username>@<server-ip>

可以指定将本地你指定的端口(debug端口就可以了,我这里是9001)转发到服务器上的某个端口,并且在后台运行(不会占用控制台,接下来可以执行其他命令)

我个人喜欢在前台运行,这样可以很方便地结束端口转发,不用去任务管理器里结束进程,执行命令可以新开一个shell嘛。要实现只需要去掉-F即可:

ssh -N -R <server-port>:localhost:<your-port> <username>@<server-ip>

要验证是否转发成功,只需要在linux上使用

telnet 127.0.0.1 9001

如果连接上即转发成功

要退出,ctrl+],再输入q回车即可

如果出现:

到服务器上看看端口占用

lsof -i:9001

然后kill掉对应的进程即可

kill -9 <PID>

(也有可能是你已经连上了当然端口已经占用了...)

回到phpstorm,点击Add Configuration...,在里面添加PHP Remote Debug(PHP Web Page也行,我感觉区别就是点击debug的时候是否会打开一个目标网页),按照如图所示配置:

注意最后点击一下Validate,看一下自己的配置是否有问题,遇到下面的警告可以不用管,因为IDE检测到服务器是配置的127.0.0.1作为远端端口,它觉得可能请求过不来,但其实你做了端口转发,可以从服务器端口访问到你的本地端口,没有问题。

接下来,安装这个插件:Xdebug helper - Microsoft Edge Addons,它可以帮你在访问的时候带上一个XDEBUG_SESSION=<IDE-KEY>的cookie,从而触发Xdebug

进入扩展选项,配置IDE key为你在php.ini里配置的IDE key

最后一步,确认你的IDE正在监听debug端口,本地给你下载下来的文件打断点,然后开启Xdebug Helper,访问目标网址,就可以调试啦~

其实不只是你指定的目标网址,只要开启了插件,带上了cookie,并且访问的url的php版本配置好了Xdebug,在本地的phpstorm都可以看到请求,不过只有你在本地有同步下来的源代码的网页才可以设断点调试~

另外,可能会出现调试中间连接断掉的情况,可以延长连接保持时间,解决方案如下:

Apache:

1.找到这一行并且把前面的注释去掉

Include conf/extra/httpd-default.conf

2.在apache\conf\original\extra\httpd-default.conf里修改(如果有就修改,如果没有就在结尾添加就好)

#xdebug:
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 7200#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 0#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 7200

3.修改 php-fpm.conf 配置

request_terminate_timeout = 0

nginx:

参见这篇文章:[工具] WSL 下优雅地 Debug | PHP 技术论坛 (learnku.com)

主要参考文章:可能是全网最详细的PhpStorm+xdebug远程调试php代码的教程 | Bruce's Blog

我的博客:https://yinkstudio.xyz,欢迎关注~

phpstorm调试远程服务器代码(超详细版本)相关推荐

  1. phpstrom+xdebug调试远程服务器代码

    phpstrom+xdebug调试远程服务器代码 调试远程服务器代码前提是在本机上有服务器上的代码并保持一致(svn或者ftp,文件共享) 1.在服务器上安装xdebug扩展 cd /xdebug/s ...

  2. idea将远程代码更新合并到本地_idea 本地调试远程服务器代码

    基本原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息. 被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令.jdw ...

  3. pycharm调试远程服务器代码

  4. 调试远程服务器上的代码时报错:调试设置中的Python路径无效

    错误 当在本地调试远程服务器上的代码时,报错: 调试设置中的Python路径无效 踩坑 根据提示去launch.json文件里 以为是"python": "${comma ...

  5. 获取远程服务器代码到本地文件,获取远程服务器代码到本地文件

    获取远程服务器代码到本地文件 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Wind ...

  6. linux | PyCharm 2020.3 (Professional) 调试远程服务器的程序

    文章目录 前言 一.Pycharm2020.3(Professional)的安装 二.Pycharm2020.3远程调试服务器程序 1.所需环境 2.开始配置Deployment 3配置远程Pytho ...

  7. 本地pycharm连接到远程服务器(超级详细)

    本地pycharm连接到远程服务器(超级详细) 文章之前,你需要做的是 1.服务器需要创建好虚拟环境 2.你的本地安装好pycharm 目的是 同步服务器上的文件 在本地进行debug,并将修改后的文 ...

  8. bat脚本常用命令及亲测示例代码超详细讲解

    这篇文章主要介绍了bat脚本常用命令及亲测示例代码超详细讲解,在这里需要注意编辑bat文件请使用ANSI编码,不然容易出现中文乱码,需要的朋友可以参考下 目录一 1.语句注释 2.暂停 3.输出和换行 ...

  9. PHPStorm 配置远程服务器文件夹在本地windows镜像,实现代码自动同步(类似于Samba架构文件同步功能)

    场景介绍: 这是一种类似samba架构,也和 filezilla+xshell 模式相类似的代码文件同步的模式,但是却更加优雅,也更加方便简洁. 环境介绍: 本地windows端:编辑器phpstor ...

最新文章

  1. ORB_SLAM2程序入口(System.cc)
  2. 【Ubuntu】将Ubuntu的源改为国内源
  3. source insight设置tab键为4个空格
  4. Java I/O中的对象序列化
  5. openstack Nova日志相关
  6. IDEA(Pycharm)一家子常用快捷键Keymap对应的英文、中文与具体位置
  7. 硅谷初创企业控制成本 裁员风渐起
  8. linux内存单个文件大小,linux dd命令参数及用法详解---用指定大小的块拷贝一个文件...
  9. Egg.js框架的简单使用
  10. Vimac 0.3.14最新版 (一款让你用键盘代替鼠标软件)
  11. 人工智能学习平台汇总
  12. P4568 飞行路线
  13. (混沌系统)超混沌Lorenz系统---matlab
  14. js判断一个元素是否在数组中存在
  15. 今日恐慌与贪婪指数为15 恐慌程度有所上升
  16. 海森堡模型自洽平均场解
  17. Docplex入门(1)——线性规划
  18. 邱姓女孩五行缺水取名
  19. 品牌笔记本电脑启动BIOS按键
  20. @Primary和@Qualifier 使用

热门文章

  1. python rgb转lab_RGB转LAB色彩空间
  2. 【参赛作品88】【我和 openGauss 的故事】之 21 天学习总结
  3. 如何使用优酷开放平台获取视频播放列表
  4. 股神投资策略及理论-6位大师比较
  5. matlab mupad打开,MATLAB–Mupad 初学者(一)~(三)
  6. C语言学习笔记(9)之C语言的组成
  7. 树莓派 video4linux,用树莓派做 RTMP 流直播服务器,可推送至斗鱼直播
  8. 分布式下的 ID 实现
  9. [转]国内计算机牛校评点
  10. C# 之 GUID格式化