zoukankan      html  css  js  c++  java
  • 端口限制情况下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     ;远程调试xdebugIDE使用的协议,默认就是dbgp

     xdebug.remote_host=127.0.0.1    ;远程调试xdebug回连的主机ip,如果开启了remote_connect_back,则该配置无效

     xdebug.remote_port=9000       ;远程调试回连的port,默认即为9000,如果有端口冲突,可以修改,对应idedebug配置里面也要同步修改

     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来直接做端口转发的配置:

    ISecureCRT连接上安装了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整个工作过程是你本地IDEPHP扩展xdebug共同协作的一个过程;

    2、在通常情况下是不会触发xdebug的远程调试的。触发方式为:

    I、在命令行的环境下,通过配置环境变量来触发;

    export XDEBUG_CONFIG="idekey=session_name"php myscript.php

     

    II、通过http请求的getpost带对应参数来触发

    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当前在哪里停止和各变量的值等等信息。

     

  • 相关阅读:
    【交换】
    【数字对】
    【改造二叉树】
    【Begin】
    100以内所有质数的输出
    位运算符、|和||、&和&&的区别
    linux中vim编辑器三种模式及常用命令的使用
    静态代码块、构造代码块和构造函数的执行顺序
    字符乱码出现的原因及解决办法
    Springcloud-微服务
  • 原文地址:https://www.cnblogs.com/chianquan/p/5630951.html
Copyright © 2011-2022 走看看