Ubuntu上PHPStorm如何进行远程调试
Ubuntu上PHPStorm远程调试实操指南

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
一 场景与原理
远程调试的典型场景,莫过于在本地Ubuntu系统的PHPStorm里,去调试那些跑在另一台服务器、甚至是本机虚拟机或Docker容器里的PHP代码。这其中的核心原理,其实是一场“双向奔赴”:你得让远程PHP环境中的Xdebug扩展,能够顺利找到并连接到本地PHPStorm所监听的调试端口(默认是9003),然后双方通过DBGp协议进行通信。当然,如果远程服务器和你的开发机之间隔着网络防火墙,无法直接“喊话”,那就得请出SSH端口转发这个“传声筒”来打通通道了。
二 方案一 远程服务器可直连开发机时的配置
当网络环境允许远程服务器直接访问你的开发机时,配置起来最为直接。下面我们分两步走。
远程服务器安装 Xdebug(Ubuntu/Debian 示例)
首先,在远程服务器上把Xdebug安排上。对于Ubuntu或Debian系统,命令很直接:
sudo apt-get update && sudo apt-get install php-xdebug
安装完成后,关键的一步是配置。你需要编辑对应SAPI(比如FPM或Apache)的php.ini文件,例如/etc/php/8.1/fpm/php.ini或/etc/php/8.1/apache2/php.ini,在文件末尾加入以下配置:
[xdebug] zend_extension=xdebug.so xdebug.mode=debug xdebug.client_host=你的开发机IP(如 192.168.1.100) xdebug.client_port=9003 xdebug.start_with_request=yes xdebug.idekey=PHPSTORM
这里有几个细节需要注意:xdebug.client_host必须填你的开发机IP,idekey需要和后面PHPStorm里的设置对应上。配置保存后,别忘了重启相关的Web服务,比如:
sudo systemctl restart apache2 或 sudo systemctl restart php8.1-fpm && sudo systemctl restart nginx
PHPStorm 设置
服务器端搞定后,轮到本地PHPStorm出场了。设置主要分三块:
1. 配置Servers:进入 File → Settings → Languages & Frameworks → PHP → Servers,点击“+”号新增一个服务器。这里需要填写远程服务器的真实Host和Port,Debugger选择Xdebug。如果本地项目路径和服务器上的部署路径不一致,务必在这里配置好Path mappings(路径映射),把本地的项目根目录和服务器上的项目根目录对应起来,这是后续断点能否生效的关键。
2. 确认调试端口:接着,在 File → Settings → Languages & Frameworks → PHP → Debug 里,确认Debug port是9003。
3. 创建远程调试配置:最后,打开 Run → Edit Configurations,点击“+”新建一个“PHP Remote Debug”。选择上一步配置好的Server,IDE key填写PHPSTORM,Debugger mode选择“Attach to remote host”。
开始调试
一切就绪,就可以开始实战了。先在PHPStorm里点击工具栏上那个“电话”图标(Start Listening for PHP Debug Connections),让IDE进入监听状态。然后,用浏览器访问你想要调试的远程URL。如果调试没有自动触发,可以在URL后面手动加上参数:?XDEBUG_SESSION_START=PHPSTORM。一旦请求命中了你在代码中设置的断点,PHPStorm就会立即捕获,接下来你就可以愉快地进行单步调试、查看变量、分析调用栈了。
三 方案二 远程服务器无法直连开发机时的 SSH 隧道
很多时候,生产环境或云服务器出于安全考虑,不允许外网直接连接内网的开发机。这时候,SSH隧道就成了我们的“秘密武器”。
它的核心思路很巧妙:既然远程Xdebug出不来,那我们就让它的9003端口,通过一条加密的SSH隧道,“绕道”连接到本地开发机的9003端口。对于Xdebug来说,它感觉就像是在连接本机的另一个服务,从而巧妙地避开了网络限制。
建立隧道(在本地开发机执行)
建立隧道需要在你的本地开发机上执行命令。最基础的命令格式如下:
ssh -R 9003:localhost:9003 user@远程服务器IP
这个-R参数,意思就是将远程服务器(Remote)的9003端口,转发到本地(localhost)的9003端口。
如果网络架构更复杂,比如远程主机需要通过一个跳板机才能访问,命令可以这样写:
ssh -J jumpuser@跳板机IP -R 9003:localhost:9003 user@目标服务器IP
连接成功后,这条隧道就建立起来了,只要SSH连接保持,隧道就会一直畅通。
远程服务器 Xdebug 配置
使用了隧道,远程服务器上的Xdebug配置就需要做一点小调整:
xdebug.client_host=127.0.0.1 # 因为隧道把端口转发到了本机回环地址 xdebug.client_port=9003
其他配置,如xdebug.mode=debug、xdebug.idekey=PHPSTORM等,保持和方案一一致即可。配置好后同样需要重启Web服务。
PHPStorm 设置
PHPStorm这边的设置,和方案一完全一样。Servers里配置好远程主机信息(注意,这里填的还是远程服务器的真实地址),Path mappings映射好路径,创建PHP Remote Debug配置并启动监听。之后,访问远程URL触发调试的步骤也完全相同。
验证隧道
如果不确定隧道是否生效,可以在远程服务器上执行一个简单的测试:
telnet 127.0.0.1 9003
如果命令能连接上(通常显示一个空白光标或连接信息),就说明隧道建立成功,Xdebug的端口已经处于可连接状态了。
四 常见问题与排查
调试配置不成功是常有的事,别慌,按照下面这几个方向排查,大多能快速定位问题。
端口与连通性
首先,也是最基础的,确认“暗号”对上了没有:远程php.ini里的xdebug.client_port必须和PHPStorm设置里的Debug port保持一致(强烈建议都用默认的9003)。其次,检查网络通路:服务器本机的防火墙、云服务商的安全组规则,都需要放行9003端口的流量(如果用了方案二的隧道,则只需确保SSH端口22开放即可)。
IDE 无法捕获请求
PHPStorm已经亮起了监听图标,但访问页面就是进不了断点?可以从这几个点检查:
1. 路径映射(Path mappings):这是最容易出错的地方。务必在PHPStorm的Servers设置里,将本地项目的根目录精确映射到服务器上项目的根目录。一个字符的差别都会导致断点失效。
2. 调试触发方式:确保请求真正携带了调试信号。除了在URL后加?XDEBUG_SESSION_START=PHPSTORM,更优雅的方式是使用“Xdebug Helper”这类浏览器插件,一键开关调试。同时,确认PHPStorm的监听按钮是按下状态。
版本与配置项差异
这里有个大坑:Xdebug 3 和 Xdebug 2 的配置项名称完全不同。Xdebug 3 使用的是 xdebug.mode、xdebug.client_host、xdebug.client_port;而 Xdebug 2 则对应 xdebug.remote_enable、xdebug.remote_host、xdebug.remote_port。如果你从网上找的教程是基于旧版本的,照搬到Xdebug 3上肯定会失效。务必先确认服务器上安装的Xdebug版本,再使用对应的配置项。
日志定位
当所有常规手段都无效时,打开Xdebug的日志是最强大的排查方法。在远程服务器的php.ini中增加一行:
xdebug.log=/tmp/xdebug.log
然后重现一次调试请求。之后去查看/tmp/xdebug.log这个文件,里面会详细记录Xdebug尝试连接的目标地址、端口、握手过程以及任何错误信息。根据日志输出,问题往往一目了然。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Java应用在Linux上如何进行安全加固
Ja va应用在Linux上的安全加固清单 在Linux环境下部署Ja va应用,安全加固不是一道选择题,而是一道必答题。下面这份清单,从系统到代码,为你梳理了关键的加固步骤。 一 运行身份与最小权限 权限管理是安全的第一道闸门。首要原则是:绝对禁止使用root账号直接运行应用。正确的做法是,为应用
Linux中Java如何进行网络编程
在Linux环境下,使用Ja va进行网络编程主要涉及到以下几个方面 想在Linux系统上玩转Ja va网络编程?其实核心就围绕几个关键模块展开。无论是构建传统的客户端-服务器应用,还是处理高效的并发连接,Ja va都提供了相当成熟的工具包。下面我们就来逐一拆解。 1 基础知识 首先得打好地基。J
Linux上Java如何进行日志管理
在Linux上管理Ja va应用程序日志:一份实战指南 在Linux环境下运行Ja va应用,日志管理是绕不开的一环。一套清晰的日志策略,不仅是排查问题的“火眼金睛”,更是保障系统稳定与安全的关键。那么,如何构建一个高效、可靠的日志管理体系呢?通常,这需要从以下几个层面入手。 1 日志框架选择 万
如何解决Linux下Java乱码问题
如何解决Linux下Ja va乱码问题 在Linux环境下处理Ja va应用,字符编码不一致是导致乱码的常见元凶。别担心,这个问题虽然烦人,但解决思路通常是清晰的。下面我们就来梳理几个关键步骤,帮你把编码对齐,让文字显示恢复正常。 1 确认系统编码设置 首先,得从源头查起。打开终端,输入 loca
yum如何安装最新版本的软件
在CentOS或RHEL系统中进行软件包管理,YUM(Yellowdog Updater, Modified)是系统管理员不可或缺的核心工具。它极大地简化了软件的安装、升级与维护流程。若您希望获取并安装某个软件的最新稳定版本,遵循以下系统化的步骤即可高效完成。 1 更新YUM软件仓库缓存 在开始安
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

