端口限制情况下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当前在哪里停止和各变量的值等等信息。

时间: 2024-10-22 10:03:27

端口限制情况下php+xdebug环境配置的相关文章

[傻瓜版] Redis在Windows下的开发环境配置步骤

redis默认运行在unix体系下,windows无法直接运行官方版.以下是几种解决方案, 一)Windows移植版.启动速度飞快,优先推荐使用. a) 2.6.12 是稳定版,我用来64位版做开发环境,数个月未发现重要问题.  下载地址: https://github.com/MSOpenTech/redis/tree/2.6/bin/release b) 2.8.4 是3月24发布的最新版,此版本运行时会临时占用内存大小的硬盘空间,下载地址: https://github.com/MSOpe

linux mint系统下编程相关环境配置

学习web开发,用到linux系统,在师兄的帮助下还算不是很费劲的把一些环境配置好了. 清单: skype ibus Google Chrome open-jdk-7.0 android-sdk ant github node.js rvm rvm.ruby rvm.rails yeoman RubyMine IntelliJ IDEA 注意:以下的命令行都是一行一行的在终端中执行 1. skype 和Chrome 在软件管理器中搜索skype,第一个,skype,点击安装. chrome 到h

Linux下安装Java环境配置

1.下载安装文件 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.在usr目录下建立java安装目录 cd /usr mkdir java 3.将安装文件拷贝到java目录下,并执行解压命令 tar -zxvf jdk-8u151-linux-x64.tar.gz 4.设置环境变量 vim /etc/profile 在文件末尾添加如下内容: JAVA_HOME=/

windows下spark开发环境配置

http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. 特注:windows下开发spark不需要在本地安装hadoop,但是需要winutils.exe.hadoop.dll等文件,前提是你已经安装了eclipse.maven.jdk等软件 spark支持jdk版本建议是1.8及以上,如果开发spark建议将jdk编译版本设置为1.8 我选择的spark是spark-1.4.0

Windows下Android开发环境配置

最近在配置安卓. 还是拿舍友没带回家的手机.. 自己手机是WP.. 搞了半天搞好了. 叹了口气,要是有人这样教我就好了,少走好多弯路. 废话不说,步骤如下" 一.安装JDK 为啥要安装JDK就不说了吧?java写安卓.. 传送门: http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装完后,配置环境变量: 右击 "我的电脑"->属性->高级->环境变量->系统变量-&g

ubuntu下openoffice开发环境配置

安装openoffice或者liboffice 路径:/usr/lib/openoffice/program ,soffice 开启服务: 安装JDK - 其默认路径:jdk7 版本号:1.7...,jdk6版本号:1.6... jodconvert的安装 http://ncu.dl.sourceforge.net/project/jodconverter/JODConverter/2.2.2/jodconverter-2.2.2.zip java -jar /tmp/ppt2pdf/jodco

【Objective-C】Windows下Objective-C开发环境配置

[Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/ 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开始学习Objective C(苹果推出的类似C语言的开发语言).由于苹果的自我封闭的产业链发展模式(从芯片.机器.开发语言.终端产品.服务)的限制,要想开发针对苹果 iPhone等产品的应用程序,就需要用Mac机器,在Xcode

(转)不停止Nginx服务的情况下平滑变更Nginx配置

在不停止Nginx服务的情况下平滑变更Nginx配置 1.修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确: /usr/local/webserver/nginx/sbin/nginx -t 如果屏幕显示以下两行信息,说明配置文件正确: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok the confi

windows下android NDK 环境配置

0.下载jdk并配置环境变量 下载最新jdk,百度搜索“jdk”就有了.安装完成后,配置环境变量(网上一搜,一堆,我这里仅作简要叙述)  计算机→属性→高级系统设置→高级→环境变量. 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 D:\Program Files\Java\jdk1.7.0_45) 系统变量→新建 CLASSPATH 变量 变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)