端口限制情况下php+xdebug环境配置
PHP程序在开发的时候调试是比较方便的,大体情况下,输出,打log是可以解决几乎所有问题。
但是还不够,有些问题,用打log的形式定位问题是相当痛苦的事情,有些时候测试环境没配好的话,你可能需要做许多的准备,才能跑一次调试,然后各种log看的头晕。
Xdebug是一个可以用于PHP断点调试的强大工具,可以大大缩短定位问题的时间,而且一步步的调试,更容易发现一些,你很难注意到的潜在问题。
背景:
1、公司内网,动态ip,有很多的接口权限都是需要对应的网络策略的,代码框架并没有很好的支持生产环境和测试环境的分离,本机调试的话,很难实现,且与服务器上的环境差异比较大,需要在专门的测试机上做调试;
2、测试机无法访问本地机器,考虑使用ssh链接然后端口转发来解决该问题。(端口转发之前没用过,刚好学习下)
配置部署:
1、扩展安装方式和其它的php扩展一样几步走,网上的教程很多,这里就不多说了;
2、Php.ini中的配置信息
; zend_extension =/usr/local/php/extensions/xdebug.so
[xdebug]
xdebug.default_enable=0
xdebug.remote_enable=1 ;远程调试开关,必须开启
xdebug.remote_handler=dbgp ;远程调试xdebug与IDE使用的协议,默认就是dbgp
xdebug.remote_host=127.0.0.1 ;远程调试xdebug回连的主机ip,如果开启了remote_connect_back,则该配置无效
xdebug.remote_port=9000 ;远程调试回连的port,默认即为9000,如果有端口冲突,可以修改,对应ide的debug配置里面也要同步修改
xdebug.remote_connect_back=0 ;是否回连,如果开启该选项,那么xdebug回连的ip会是发起调试请求对应的ip
xdebug.remote_autostart=1
xdebug.idekey=netbeans ;调试使用的关键字,发起IDE上的idekey应该和这里配置的idekey一致,不一致则无效
xdebug.remote_log=/data/xdebug_log/remote.log
3、重启apache,打印phpinfo(),可以看见xdebug是否生效和参数情况。
4、这里我们使用SecureCRT来直接做端口转发的配置:
I、SecureCRT连接上安装了PHP的服务端;
II、选择:菜单->options->session options->这里有两个端口转发;
一个是“port forwarding”监听本地对应ip:port接受到的信息,转发到对应服务端的对应ip:port;(ps:这里目标服务器ip可以是ssh链接上的服务器网络环境下能访问的所有ip)
另一个是“Remote/X11”监听服务端的对应ip:port接受道德信息,转发到本地服务器的对应端口;(ps:这里的本地服务器的ip也可以是本地网段中的其它ip)
这里我们配置Remote/X11->add 名字随便,默认不配置ip则为localhost

5、配置IDE,主要配置为:IDE中的菜单->工具->选项

还有就是对应项目的配置:右击对应的项目,打开项目的属性:


6、以上配置好了,就可以测试下效果了。
Xdebug远程调试原理:
这里是官方的原理解释:https://xdebug.org/docs/remote
英文好的可以访问官网。这里说明下我的理解,以加深记忆。

1、xdebug整个工作过程是你本地IDE与PHP扩展xdebug共同协作的一个过程;
2、在通常情况下是不会触发xdebug的远程调试的。触发方式为:
I、在命令行的环境下,通过配置环境变量来触发;
export XDEBUG_CONFIG="idekey=session_name"php myscript.php
II、通过http请求的get、post带对应参数来触发
XDEBUG_SESSION_START=session_name
这里主要是当php接收到请求的时候xdebug判断请求参数带有xdebug_session,则会在cookie上设置idekey=session_name
III、也可以通过xdebug对应的浏览器插件,帮忙直接在cookie中设置idekey=session_name
3、这里假设我们的调试为http调试,IDE发起调试的时候,通过浏览器访问请求,例如:http://localhost/test.php?XDEBUG_SESSION_START=session_name,并监听9000端口;
4、Xdebug截获到该请求,将设置cookie中idekey=session_name,主动连接remote_ip:remote_port,连接到IDE,跟IDE对话;
对话内容主要为ide告诉xdebug,在哪些文件设置了断点,在执行第一行代码时候要停止,进行下一步操作,进入函数,跳出函数等信息
Xdebug则在程序运行到断点的时候告诉IDE当前在哪里停止和各变量的值等等信息。
端口限制情况下php+xdebug环境配置的更多相关文章
- windows下apache+https环境配置
windows下apache+https环境配置 转 https://www.cnblogs.com/sandaizi/p/7519370.html 1.修改配置文件conf/httpd.conf,去 ...
- Linux下安装Java环境配置
1.下载安装文件 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. ...
- 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- (转)不停止Nginx服务的情况下平滑变更Nginx配置
在不停止Nginx服务的情况下平滑变更Nginx配置 1.修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确: /u ...
- 【Objective-C】Windows下Objective-C开发环境配置
[Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/ 最近打 ...
- windows下spark开发环境配置
http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...
- Linux—CentOS7下python开发环境配置
CentOS7下python开发环境配置 上一篇博客讲了如何在Centos7下安装python3(https://www.cnblogs.com/zivli/p/9937608.html),这一次配置 ...
- Metabase在Windows下的开发环境配置
Metabase在Windows下的开发环境配置 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} Metabase在Wind ...
随机推荐
- java 调用axis2 webservice
import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apach ...
- html局部打印
html页面局部打印的小栗子 只要修改点击打印的按钮和打印的div区域的id就行啦 <!DOCTYPE html> <html> <head> <title& ...
- ASP.NET 状态服务 及 session丢失问题解决方案总结
ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...
- java归并排序,单线程vs多线程
一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ...
- mac office 激活
详见:http://blog.csdn.net/tech4j/article/details/47953311
- Jenkins+ANT+SVN快速搭建持续集成环境
伟大的语言都从helloworld开始,这里我们用Jenkins+ANT+SVN来搭建这一套持续集成环境. 环境准备: 一台已经配置好Jenkins和Ant的机器. 项目准备: 用Ecplise建立一 ...
- (十五)ioctl、ifreq、ifconf
ioctl操作 传统上ioctl函数是用于那些普遍使用,但不适合归入其他类别的任何特性的系统接 口.Posix去掉了ioctl,它通过 创建特殊的其功能已被Posix标准化的包裹函数来代替ioct ...
- 后台接收URL地址的参数
其实很简单,只是写一下加强记忆 后台接收URL传递过来的参数有两种方法: 第一种用request接收 HttpServletRequest request = ServletActionContext ...
- linux centos 安装mysql
安装步骤 http://www.cnblogs.com/gaojupeng/p/5727069.html 下面这个报错 主要还是在 题啊加软连接的 命令出了问题 1.启动 报错 mysqld_s ...
- 【OS】实模式和保护模式区别及寻址方式
实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...