php调试配置

news2025/2/25 5:06:29

错误信息输出

错误日志

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={IDE key}

整体原理就是在需要进行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图表拖出来。不能选择模式的话是因为需要有网址才可以选择,如果不行可以重启浏览器,还不行就重启电脑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL进阶】 锁

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…

Mybatis源码学习笔记(四)之Mybatis执行增删改查方法的流程解析

1 Mybatis流程解析概述 Mybatis框架在执行增伤改的流程基本相同, 很简单,这个大家只要自己写个测试demo跟一下源码,基本就能明白是怎么回事,查询操作略有不同, 这里主要通过查询操作来解析一下整个框架的流程设计实现。 2 Mybat…

【python】argparse 模块的使用、Pycharm中使用argparse

目录1、简介2、使用步骤1)导入argparse模块,并创建解释器2)添加所需参数3)解析参数3、使用 pycharm 传递参数给 argparse1、简介 argparse 模块是 Python 标准库中提供的一个命令行解析模块,它可以让使用者以类似 Uni…

给安全平台编写插件模块的思路分享

一、背景 最近在GitHub看到一个新的开源安全工具,可以把工具都集成到一个平台里,觉得挺有意思,但是平台现有的工具不是太全,我想把自己的工具也集成进去,所以研究了一番 蜻蜓安全工作台是一个安全工具集成平台&#x…

我的零分周赛:CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果、圆桌

CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果🍎、圆桌。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教…

steam搬砖项目,小投入高回报,可放大操作,(内附教学资料)

我必须要说,steam搬砖项目就是全网门槛最低的副业,有手就行! 本人90后底层员工一枚,新入csgo搬砖项目,轻松翻身 什么做抖音、海外问卷、直播卖货,电商等等对比我这个都是小钱。我这个方法是利用了大部分人…

C++线程/阻塞/同步异步----2

本章节内容为记录改写RTK代码时,学习的知识 同步和异步区别 1.定义不同:同步需要将通信双方的时钟统一到一个频率上,异步通信发送的字符间隔时间可以是任意的; 2.准确性不同:同步通信需要比较高精度的精确度,异步则不…

【算法基础】栈与队列

一、栈1.1 模拟栈实现一个栈,栈初始为空,支持四种操作:push x – 向栈顶插入一个数 x;pop – 从栈顶弹出一个数;empty – 判断栈是否为空;query – 查询栈顶元素。现在要对栈进行 M 个操作,其中…

【2023最火教程】Python性能测试框架Locust实战教程(建议收藏)

01、认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思:作者的想法是在测试期间,放…

图解 paxos 论文《The Part-Time Parliament》

本文以图文并茂的方式重新演绎 Paxos 开山之作 《The Part-Time Parliament》[1],并尝试解释原论文中语焉不详的地方。 背景 在 Paxos 小岛上,施行着一种 Parliament(议会) 政治。小岛上执行的所有 decree(法令) 都需要先由 Parliament 在 Chamber 内表…

leetcode 21~30 学习经历

leetcode 21~30 学习经历21. 合并两个有序链表22. 括号生成23. 合并K个升序链表24. 两两交换链表中的节点25. K 个一组翻转链表26. 删除有序数组中的重复项27. 移除元素28. 找出字符串中第一个匹配项的下标29. 两数相除30. 串联所有单词的子串小结21. 合并两个有序链表 将两个升…

15. Qt中OPenGL的参数传递问题

1. 说明 在OPenGL中,需要使用GLSL语言来编写着色器的函数,在顶点着色器和片段着色器之间需要参数值的传递,且在CPU中的数据也需要传递到顶点着色器中进行使用。本文简单介绍几种参数传递的方式: (本文内容仅个人理解&…

学校节能减排实施方案-浅析高校能耗及节能管理

摘要:高校能源管理是高校治理体系和高校后勤保障的重要组成部分。利用数据统计等手段对蚌埠医学院近年来的能源使用情况进行统计分析,通过横向及纵向对比,结合国家相关政策法规及同类高校能耗情况,对该校能源消耗现状进行了综合分析&#xff…

Web3中文|2023年zk赛道爆发,即将推出的Polygon zkEVM有多重要?

Crypto行业被广泛关注的零知识证明(Zero—Knowledge Proof)技术,在1980年就被数学家S.Goldwasser、S.Micali及C.Rackoff提出。 零知识证明涉及一系列步骤,可以实现密码学中的「可用而不可知」。 而区块链有着公开透明、不可篡改…

Nginx之反向代理、负载均衡、动静分离。

Nginx之反向代理、负载均衡、动静分离。 1、Nginx是啥? 轻量级Web服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器 在 BSD-like 协议下发行、占内存少、并发高(同时处理请求能力)。 2、安装 官网&#xf…

【Python】序列与列表(列表元素的增删改查,求之,列表推导式、列表的拷贝)

一、序列序列的概念:按照某种顺序排列的数据类型就叫做序列,比如字符串,列表,元组,集合序列的共同点是都有下标,支持index()方法和count(),也支持切片处理(等同于字符串序列的切片处理)l1 [0, …

Leetcode(每日一题)——1140. 石子游戏 II

摘要 ​​​​​​1140. 石子游戏 II 877. 石子游戏 1406. 石子游戏 III 375. 猜数字大小 II 464. 我能赢吗 486. 预测赢家 1025. 除数博弈 一、动态规划解析 Alice一开始有两个选择:拿前一堆/前两堆石子。如果 Alice 拿前一堆,那么轮到 Bob 时…

Propargyl-PEG1-SS-PEG1-PFP ester,1817735-30-0,炔基应用于生物标记

【中文名称】丙炔-单乙二醇-二硫键-单乙二醇-五氟苯酚酯【英文名称】 Propargyl-PEG1-SS-PEG1-PFP ester【结 构 式】【CAS号】1817735-30-0【分子式】C16H15F5O4S2【分子量】430.4【基团部分】炔基基团【纯度标准】95%【包装规格】1g,5g,10g&#xff0c…

互联网行业中,哪些岗位越老越吃香?

你是不是也想转行IT行业,找一门适合自己学习,能拿高薪的技术,最好还越老越吃香?或许先应该看看对应岗位,老资格的同行们可以拿到的薪资数再做判断。整体上看,大部分岗位的起薪水平相差不大,但随…

matplotlib绘制三维图

目录线状堆积图 PolygonPlot三维表面图 SurfacePlot散点图ScatterPlot柱形图 BarPlot三维直方图螺旋曲线图 LinePlotContourPlot轮廓图网状图 WireframePlot箭头图二维三维合并文本图Text三维多个子图线状堆积图 PolygonPlot Axes3D.add_collection3d(col, zs0, zdir‘z’)  …