PhpStorm XDebug 远程调试
现在我们自己公司的各种开发和测试服务器,都是使用阿里云的服务器。一些PHP的项目,无法在本地搭建完整的环境,在外网服务器上调试更方便定位问题。发现网上没有完整的关于如何配置PHPStorm和XDebug远程调试的资料,自己配置的过程遇到一些问题,写出来给大家做一个参考。
演示环境
本地开发环境:Mac Pro + PHPStorm 9.0
服务器的环境:Ubuntu 14 LTS + PHP 5.5 + XDebug 2.2.3
不管是Windows还是其它的Linux的版本,具体的配置差不多,一样可以作为一个参考。
准备工作
1. 开发环境上安装 PHPStorm,服务器上安装好PHP
2. 在服务端安装XDebug,Ubuntu上 apt-get install php5-xdebug。
3. 安装完XDebug后,在php.ini里面加入如下的XDebug配置,配置如下。
[xdebug]
zend_extension=/usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=7777
xdebug.idekey=PHPSTORM
上面每行解释一下
zend_extension,这个配置为xdebug的安装路径,这个根据自己具体的安装的情况填写。
remote_enable 和 remote_host 分别配置为1和127.0.0.1
remote_port,这个默认值为9000,如果这个端口被其它进程占用了就需要换一个。我这里因为配置了nginx和php-fpm,9000端口已经被占用,所以我换了一个7777。注意,这里的这个端口要和PHPStorm中的设置保持一致,如下图:

idekey设置为PHPSTORM,这个字符串在启动调试的时候要用到,后面再解释这个。
4. 验证一下配置,使用phpinfo看一下输出,查看输出里面是否有xdebug的内容。注意,如果之前有配置过比如zend debugger之类其它的调试工具,需要先从php.ini里面把其它的调试配置去掉,不能同时配置两个调试工具。
开始调试
调试的过程如下:
1. 第一步,先在PhpStorm里面开始监听调试请求,图标里面的从红色变成绿色,表示开始监听了。

点击变为如下:

2. 建立好断点。

3. 从开发环境上,创建一个到服务器上的SSH连接通道,Linux/Mac下使用下面的命令:
ssh -R 9000:localhost:9000 root@服务器的IP地址
注意这个写法,一个是本地端口地址,一个是远程的端口地址,默认情况下都是9000。但是如果之前修改过,那么端口需要换。比如我这里端口改成了7777,命令就应该是如下的样子:
ssh -R 7777:localhost:7777 root@21.23.222.113
注意,第3步一定要在第1步之后,也就是说建立这个通道之前,必须先开始监听。
如果开发环境是windowds,那么需要使用putty去建立这个连接通道。具体的方法参考:https://confluence.jetbrains.com/display/PhpStorm/Remote+debugging+in+PhpStorm+via+SSH+tunnel
4. 激活服务端的调试器
通过在请求里面带上 XDEBUG_SESSION 参数,并且把参数值设置为之前XDebug里面配置的“idekey”的值,就可以激活服务端的调试。
例如,可以在POST或者GET参数里面加上 XDEBUG_SESSION=PHPSTORM,服务端就会启动调试了。 比如我们要调试 http://www.abc.com/test.php,那么访问链接http://www.abc.com/test.php?XDEBUG_SESSION=PHPSTORM 就可以启动调试了。
具体的原理是这样的,服务端收到请求后,XDebug会检查参数里面的XDEBUG_SESSION值是否等于“idekey”的值,如果相等,那么就说明需要调试,否则就不调试。这个参数也可以设置在Cookie里面。为了调试方便,可以把下面的两端脚本作为链接收藏到书签栏,每次如果要调试就调用第一段脚本在Cookie里面写入XDEBUG_SESSION参数,如果要停止调试,那么就调用第二段脚本移除XDEBUG_SESSION参数的值。
javascript:(function() {document.cookie='XDEBUG_SESSION='+'PHPSTORM'+';path=/;';})()
javascript:(function() {document.cookie='XDEBUG_SESSION='+''+';expires=Mon, 05 Jul 2000 00:00:00 GMT;path=/;';})()
我自己的书签栏就是这么设置的:

5.开始调试
一切都弄好后,直接在浏览器里面访问服务端的页面,PHPStorm就会检测到调试连接并进入调试状态。
注意,需要先配置好一个部署,把本地文件和服务端的文件做好映射,不然会提示文件映射错误。
推荐参考链接
https://confluence.jetbrains.com/display/PhpStorm/Remote+debugging+in+PhpStorm+via+SSH+tunnel
https://confluence.jetbrains.com/display/PhpStorm/Zero-configuration+Web+Application+Debugging+with+Xdebug+and+PhpStorm#Zero-configurationWebApplicationDebuggingwithXdebugandPhpStorm-4.Activatedebuggeronserver
PhpStorm XDebug 远程调试的更多相关文章
- PhpStorm Xdebug远程调试环境搭建原理分析及问题排查
2017年05月26日 经验心得 目录 一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...
- phpstorm+xdebug远程调试设置
1 xdebug扩展安装 1.1 xdebug扩展安装: 2 服务器PHP配置 3 phpstorm设置 3.1 添加远程debug 3.2 phpstorm设置: 4 浏览器插件安装 4.1 chr ...
- [xDebug] PhpStorm Xdebug远程调试环境搭建
对于简单的工程,直接print_r();exit()已经足够,但是对于大型项目有时就有点力不从心.. 1,环境介绍 本地:windows10(192.168..)+ phpstorm8远程:Cento ...
- XDEBUG 远程调试
我的PHP环境是安装在虚拟机中.真机系统用的是windows.那么我要用XDEBUG调试代码,就得用XDEBUG的远程调试功能. 首先要给远程环境中安装XDEBUG扩展,具体方法:http://www ...
- PHPStorm+XDebug进行调试图文教程以及解析wamp的php.ini设置不生效的原因
这篇文章主要为大家详细介绍了PHPStorm+XDebug进行调试图文教程,内容很丰富,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 笔者的开发环境如下:Windows8.1+Apache+P ...
- PhpStorm+xdebug+postman调试
PhpStorm+xdebug+postman调试 写PHP时,一直用postman做测试,最近发现在测试过程中可以用xdebug来断点调试,比原来手动打exit或者die来断点效率高多了. 下面记录 ...
- 转:PHPStorm+XDebug进行调试图文教程
原文:PHPStorm+XDebug进行调试图文教程 一.XDebug安装配置 (1)下载XDebug下载地址:http://www.xdebug.org/必须下载跟机器上安装的php匹配的版本才行. ...
- xdebug远程调试原理分析
xdebug可以控制PHP程序的执行,这意味着xdebug可以在任何时候暂停或者恢复正在运行的PHP程序.当PHP程序被暂停的时候,xdebug可以获取到程序的有关 信息,比如变量的值等.xdebug ...
- 【PHP】- PHPStorm+XDebug进行调试图文教程
转载:https://www.cnblogs.com/LWMLWM/p/8251905.html 这篇文章主要为大家详细介绍了PHPStorm+XDebug进行调试图文教程,内容很丰富,具有一定的 ...
随机推荐
- WindowsAPI调用和OCR图片识别
傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用A ...
- Elasticsearch初步使用(安装、Head配置、分词器配置)
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.ElasticSearch简单说明 a.ElasticSearch是一个基于Lu ...
- #9.5课堂JS总结#循环语句、函数
一.循环语句 1.for循环 下面是 for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块) ...
- 深入JavaScript:词法分析、连续赋值猜想
JavaScript:词法分析.连续赋值猜想 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5851642.html 深夜发文,先吐槽下博客园的编 ...
- jquery中 $(document).ready()和window.onload的区别
1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2.编写个数不同 ...
- webpack初体验
本人菜鸟一枚,最近一直在研究webpack的使用,记录下自己的学习体会,由于网上关于webpack的资源(技术博客)太多,对于初学webpack的新手来说,看着五花八门的技术博客,真是头晕眼花(可能是 ...
- mysql时间加减函数
先来看一个例子: select now(),now()+0; 可以看到now()函数可以返回一个时间也可以返回一个数字,就看大家如何使用.如果相对当前时间进行增加或减少,并不能直接加上或减去一个数字而 ...
- Linux vi/vim(转载)
Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主 ...
- 在其他系统Iframe中显示SharePoint 页面
前段时间在做一个项目,要求将SharePoint 的 OWA(Office Web Apps)中的文档显示页面嵌入到另外一个OA系统中,提供给用户可以通过浏览器查看SharePoint文档的能力. 嵌 ...
- Project、Target、Workspace and Scheme
前言 今天有人问我Target和Project是什么关系?额...学习iOS开发都知道Target和Project的关系.这里我就简单的做了一个总结,而且加入的Scheme和Workspace.如果不 ...