首页 > 编程语言 >php调试配置

php调试配置

时间:2023-02-22 11:59:47浏览次数:40  
标签:xdebug fpm 配置 dbgp proxy IDE php 调试

错误信息输出

错误日志

nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
所以我们要进行如下的设置就能查看到nginx下php-fpm不记录php错误日志的方法:

修改配置方法如下:

/etc/php/8.2/fpm/php-fpm.conf

如果没有就增加:

[global]
; Note: the default prefix is /usr/local/php/var
error_log = log/php_error_log
[www]
catch_workers_output = yes

/etc/php/8.2/fpm/php.ini

如果没有就增加:

log_errors = On
error_log = "/usr/local/php/8.2/log/error_log.log"
error_reporting=E_ALL

注意设置权限:sudo chmod 777 -R /usr/local/php,否则无法正常生成日志文件
改完之后重启php-fpm服务:sudo systemctl restart php8.2-fpm.service

直接浏览器中输出php错误信息

一般这种只在调试过程开,方便程序处理,上线后就将错误信息都记录在日志。

/etc/php/8.2/fpm/php-fpm.conf

如果没有就增加:

[global]
; Note: the default prefix is /usr/local/php/var
error_log = log/php_error_log
[www]
catch_workers_output = yes

/etc/php/8.2/fpm/php.ini

; display_errors = Off
display_errors = On

然后重启服务:
改完之后重启php-fpm服务:sudo systemctl restart php8.2-fpm.service

php调试

php调试基于IDE(如phpstorm)进行调试,整个调试模型中有四个角色:

  1. 浏览器
  2. php-fpm
  3. dbgp proxy
    这个视情况不需要
  4. IDE

关系如下:
img

操作步骤如下:

  1. 启动dbgpProxy
  2. IDE配置xdebug
  3. IDE注册到xdebug
  4. IDE启动监听php xdebug connection
  5. 浏览器增加XDEBUG_SESSION_START=

整体原理就是在需要进行php调试的时候,浏览器要在网址中增加XDEBUG_SESSION_START={IDE key}参数,然后nginx接收数据包并转发给php-fpm。php检测到该参数,就通过Xdebug向IDE发送debug请求,之后就进入debug模式,没执行一行php命令就通过Xdebug发送给客户端操作一下,最终完成php解析。

是否使用dbgp proxy

dbgp proxy使用时的命令为:./dbgpProxy -i :9001 -s 127.0.0.1:9022-i-s参数都是指定监听ip和端口,-i指定IDE连接的ip和端口,-s指定的是运行php-fpm的服务器连接的ip和端口。
dbgp proxy是个独立的软件,可以使用也可以不使用,使用的话,php-fpm配置时就直接将client_hostclient_port指定为dbgp proxy的服务器接口;如果不使用,那么直接将php-fpm配置指向IDE所在主机的IP和端口也可以进行调试。

php服务器端xdebug安装

  1. 版本选择
    使用echo phpinfo()输出php信息
  2. 点击页面,然后Ctrl + A全选页面内容然后复制,打开https://xdebug.org/wizard.php网站将复制的内容都粘贴进去,然后点击分析,然后就有对应的安装包版本和安装方法,按照步骤进行安装。

dbgp proxy下载

是个可执行文件,直接下载运行即可:https://xdebug.org/download#dbgpProxy

xdebug配置

服务器部分配置

配置的时候一定要注意安装的是xdebug2还是xdebug3,两者的配置从根本上是不同的,这里使用的xdebug3,如果使用的是php-fpm,那么就打开/etc/php/8.2/fpm/php.ini在配置文件最后补充:

[Xdebug]
zend_extension = /usr/lib/php/20220829/xdebug.so
xdebug.log  = /home/i/sourceCode/xdebug/data/log/xdebug.log  
xdebug.mode = develop,debug
xdebug.start_with_request = default|default
xdebug.client_port = 9001
xdebug.client_host = 192.168.232.1
xdebug.remote_handler = dbgp
xdebug.cli_color = 2
xdebug.var_display_max_depth = 15
xdebug.var_display_max_data  = 2048

其中xdebug.idekey网络上说必须要,但是测试过程中发现有无皆可。
然后就是xdebug.client_port和``xdebug.client_host,这两个参数和是否使用dbgp proxy有关,如果使用 配置完毕后使用sudo systemctl restart php8.2-fpm`重启php-fpm。

IDE部分配置

IDE这里选择phpstorm,配置如下:

服务器配置

这个需要配置服务器,然后进行路径映射,否则无法正常调试:
img

调试设置

调试这里的设置如果是运行Xdebug设置ip:port直接指向IDE的ip:port,这里才需要配置,如果是Xdebug指向了dbgp proxy,那么这里就不需要配置:
img
这里的端口设置设置为Xdebug指定的端口;

dbgp proxy设置

如果使用了dbgp proxy软件介入了IDE与Xdebug通讯,此时Xdebug应该配置ip:port为dbgp proxy软件-s指定的ip:port,而IDE侧需要配置DBGp代理并注册到dbgp proxy软件:

  1. 配置代理:
    img
  2. 注册代理:
    注册代理之前要保证dbgp proxy软件已经打开,打开后进行注册:
    img

测试

  1. 视需要运行dbgp proxy软件:./dbgpProxy -i :9001 -s 127.0.0.1:9022
  2. phpstorm视需要注册dbgp proxy
  3. phpstorm开始侦听php调试链接
    img
  4. 打开服务器,然后追加参数:?XDEBUG_SESSION_START=owen,这里的owen就是IDE key,这个如果使用DBGp proxy要保证两个key一致,否则无法进行调试。

Chrome插件

Chrome有个插件 -- Xdebug helper,右键选项可以设置IDE key(选择other才可以输入自定义ide key)。然后在需要的时候只需要点击插件选择模式即可。
img
一开始没有那个显示可以从图表右边的扩展插件图标中将XDebug Helper图表拖出来。不能选择模式的话是因为需要有网址才可以选择,如果不行可以重启浏览器,还不行就重启电脑。

标签:xdebug,fpm,配置,dbgp,proxy,IDE,php,调试
From: https://www.cnblogs.com/welsey/p/17143843.html

相关文章

  • debian11安装配置jdk8
    来源参考 https://blog.csdn.net/m0_57194110/article/details/128847508 1.下载jdk8JavaDownloads|Oracle下载 jdk-8u361-linux-x64.tar.gz 文件就可以了  ......
  • Vue配置文件中的proxy配置
    Vue配置文件中的proxy配置https://huaweicloud.csdn.net/638eec24dacf622b8df8dafa.html?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog......
  • php7 No package 'sqlite3' found
    源码安装php7.4的时候报了这个错,说是缺少sqlite3,可以试着:yuminstall sqlite-devel但是试了以后还是报错,是因为版本过低。于是,去它的官网下载安装包,解压,安装,make&&ma......
  • hadoop - hadoop2.6 伪分布式 - 全局配置 和 启用 YARN 进行任务调度与资源管理
    1.全局配置        上面的学习中,我们都是先进入到/usr/local/hadoop目录中,再执行sbin/hadoop,实际上等同于运行/usr/local/hadoop/sbin/hadoop。我们可以......
  • hadoop - hadoop2.6 伪分布式 - eclipse 中 配置 和 示例 wordcount
    1.配置eclipse   1.1下载linux版的eclipse ​​百度云-大数据资料专辑​​  1.2解压   可以手动提取,也可以命令提取:yuan@LABELNET:~/JAVA$sudotar-zx......
  • Prometheus 安装和配置
    安装Prometheus之前必须要先安装ntp时间同步,因为prometheusserver对系统时间的准确性要求很高,必须保证本机时间实时同步。这里我们以Centos7为例,先执行时间同步,执行如下......
  • 【springboot】配置数据源datasource
    数据源datasource可以获取数据库连接Connection可以创建JdbcTemplate操作数据库默认配置spring默认的数据库连接池为Hikari,maven依赖如下<!--spring-boot-star......
  • Android 打包生成APK文件时报lintOptions配置错误
    解决办法,在build.​​gradle​​里面的buildTypes同级添加如下代码,放在android下面lintOptions{checkReleaseBuildsfalseabortOnErrorfalse}checkReleaseBuilds=fal......
  • python+playwright 学习-8.如何在控制台调试定位(Inspect selectors)
    前言在运行selenium脚本的时候,我们通常习惯用sleep去让页面暂停,打开console输入$(selector)去调试定位页面的元素。有时候明明页面能找到元素,代码运行却找不到,很是郁......
  • 安装配置HAProxy
    HAProxy安装过程与日志输出配置先安装LUA$yum-yinstallzlibgccgcc-c++libgcczlib-develpcrepcre-developensslopenssl-devel$yuminstall-ylibnllibnl-......