惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
L
LINUX DO - 最新话题
博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
C
Cisco Blogs
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
G
GRAHAM CLULEY
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
D
DataBreaches.Net
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
I
InfoQ
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 叶小钗
Project Zero
Project Zero

f2h2h1's blog

使用yii3实现一个微框架 claw养殖技术 计算机网络基础知识 定时任务 ACME的使用经验 magento2加上varnish缓存 开发Magento2的模块 在magento2中使用persisted-query socket编程 一些开发笔记 一段CSDN文章主要内容的油猴脚本 电子邮件的不完整总结 git的笔记 在Windows下配置PHP服务器 终端,控制台和外壳 PHP各种运行方式的不完整总结 把网页导出成PDF 和颜色相关的笔记 HTTP认证方式的不完整总结 SEO的经验 密码学入门简明指南 文件的上传和下载 用纯CSS3实现的滑动按钮 在VSCode里调试PHP Linux的GUI 关于字符编码的一些坑 nc的使用和原理 在Windows下安装Magento2 对JS原型链的理解 使用docker-compose部署magento2 浏览器和服务器通讯方式的不完整总结 观察网站性能 一些关于Linux的笔记 telnet的不完整总结 在Windows下安装pear MySQL的时间类型和时间相关的函数 Windows下通过PEB读取进程的环境变量 关于 在Windows下搭建git服务 关于环境变量的不完整总结 使用shell实现的kv数据库 如何完成以xx管理系统为选题的毕业设计 数字号码资源 各种标记语言 使用PowerShell实现的http服务器 kind相关经验 DNSSEC简介 nginx+ffmpeg+websocket实现的直播例子 使用Tesseract识别字符验证码 使用docker部署nuxt FirstData后台的设置 paypal,firtdata,支付宝的不完整接入指南 微信支付的不完整接入指南 用docker-compose部署lnmp环境 mongodb分片 练习
在VSCode里使用Xdebug远程调试PHP
2023-12-22 · via f2h2h1's blog

这篇文章最后更新的时间在六个月之前,文章所叙述的内容可能已经失效,请谨慎参考!

0.

  1. 本地的 VSCode 需要安装好 PHP Extension Pack
  2. 远程服务器的 PHP 需要正确安装好 Xdebug 拓展
  3. 需要额外的一个代理
  4. 请求的流程
客户端->http服务->php->代理->VSCode

1. 远程服务器的 PHP 安装 Xdebug 拓展

  1. 在命令行里运行
php -i
  1. 打开这个网址 https://xdebug.org/wizard.php 把第一步输出的结果复制进去,然后获得对应版本 Xdebug 的下载地址,当然如果你知道熟悉 PHP 的版本也可以直接选择相应的版本下载
  2. 解压下载后的压缩包,把 Xdebug 的拓展复制进 PHP 的拓展目录里,PHP 的拓展目录一般是安装目录里的 ext 文件夹

2. 修改 php.ini

在 php.ini 的最后加上如下内容

  • xdebug 2.9

    [Xdebug]
    ; Xdebug 拓展路径
    zend_extension=""
    ; 分析器输出路径
    xdebug.profiler_output_dir=""
    ; 日志路径
    xdebug.remote_log=""
    ; 跟踪输出路径
    xdebug.trace_output_dir=""
    ; 是否开启远程调试
    xdebug.remote_enable=on
    ; 是否开启分析器
    xdebug.profiler_enable=on
    ; 允许调试的客户端IP
    xdebug.remote_host=127.0.0.1
    ; 远程调试的端口
    xdebug.remote_port=9002
    ; 开启远程调试自动启动
    xdebug.remote_autostart=on
    ; 显示局部变量
    xdebug.show_local_vars = on
    ; 显示默认的错误信息
    xdebug.default_enable = on
    ; ide key
    xdebug.idekey = "vscode"
    

    请根据实际填写以下参数

    ; Xdebug 拓展路径
    zend_extension=""
    ; 分析器输出路径
    xdebug.profiler_output_dir=""
    ; 日志路径
    xdebug.remote_log=""
    ; 跟踪输出路径
    xdebug.trace_output_dir=""
    ; 允许调试的客户端 IP
    xdebug.remote_host=127.0.0.1
    ; 远程调试的端口
    xdebug.remote_port=9002
    
  • xdebug 3.0

    [Xdebug]
    zend_extension = path/to/xdebug
    xdebug.mode = "debug"
    xdebug.idekey = "vscode"
    ; 允许调试的客户端 IP
    xdebug.client_host = 127.0.0.1
    ; 远程调试的端口
    xdebug.client_port = 9002
    xdebug.connect_timeout_ms = 2000
    

这里的 允许调试的客户端 IP 就是代理服务器的 IP,远程调试的端口 就是代理服务器的端口

3. 配置代理服务器

  1. 下载 frp 到代理服务器里,这是使用的是 frp 0.29.0,https://github.com/fatedier/frp/releases
  2. 新建一个 frps.ini 文件,并添加以下内容
[common]
bind_port = 7080
token = sl12321dfkjsldfjsld3
  1. 启动 frp
frps -c frps.ini

4. 在本地开发的电脑配置 frp

  1. 下载 frp

  2. 新建一个 frpc.ini 文件,并添加以下内容

[common]
server_addr = 192.168.xxx.xxx
server_port = 7080
token = sl12321dfkjsldfjsld3
[xdebug]
type = tcp
local_ip = 0.0.0.0
local_port = 9098
remote_port = 9098

server_addr 填的是代理服务器的 ip ,server_port 需要和代理服务器的端口一致,服务器的 token 和本地的 token 需要一致

  1. 启动 frp
frpc -c frpc.ini

5. 设置 VSCode

  1. 安装 VSCode 的 PHP 拓展包,在 VSCode 的拓展里搜索 PHP Extension Pack 然后选择安装即可
  2. 使用 VSCode 打开需要调试的 PHP 项目的目录
  3. 添加一个调试配置,在环境选择的时候选 PHP
  4. 在新建的配置里,添加 pathMappings , key 是服务器代码的路径, value 是本地代码路径, Xdebug 需要路径一致才能击中断点,调试时 本地代码路径会映射为服务器代码的路径
  5. 把 port 的值修改为 frpc.ini 的 local_port 一样的值
  6. 完整的配置
{
    "name": "Listen for remote XDebug",
    "type": "php",
    "request": "launch",
    "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
    },
    "port": 9098,
    "env": {
        "DBGP_IDEKEY":"vscode"
    }
}

其它

需要注意的是,代理服务器的安全组和防火墙需要放行相应的端口,这里需要放行的端口是 7080 和 9098

其实可以用 ssh 的端口转发来替代 frp 的

ssh -o ServerAliveInterval=60 -f -N -g -L 127.0.0.1:9098:远程服务器地址:9098 远程服务器用户名@远程服务器地址

参考

在VSCode里调试PHP