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)进行调试,整个调试模型中有四个角色:
- 浏览器
- php-fpm
- dbgp proxy
这个视情况不需要 - IDE
关系如下:
操作步骤如下:
- 启动dbgpProxy
- IDE配置xdebug
- IDE注册到xdebug
- IDE启动监听php xdebug connection
- 浏览器增加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_host
和client_port
指定为dbgp proxy
的服务器接口;如果不使用,那么直接将php-fpm配置指向IDE所在主机的IP和端口也可以进行调试。
php服务器端xdebug安装
- 版本选择
使用echo phpinfo()
输出php信息
- 点击页面,然后
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,配置如下:
服务器配置
这个需要配置服务器,然后进行路径映射,否则无法正常调试:
调试设置
调试这里的设置如果是运行Xdebug设置ip:port直接指向IDE的ip:port,这里才需要配置,如果是Xdebug指向了dbgp proxy,那么这里就不需要配置:
这里的端口设置设置为Xdebug指定的端口;
dbgp proxy设置
如果使用了dbgp proxy软件介入了IDE与Xdebug通讯,此时Xdebug应该配置ip:port为dbgp proxy软件-s
指定的ip:port,而IDE侧需要配置DBGp代理
并注册到dbgp proxy软件:
- 配置代理:
- 注册代理:
注册代理之前要保证dbgp proxy软件已经打开,打开后进行注册:
测试
- 视需要运行
dbgp proxy
软件:./dbgpProxy -i :9001 -s 127.0.0.1:9022
- phpstorm视需要注册
dbgp proxy
- phpstorm开始侦听php调试链接
- 打开服务器,然后追加参数:
?XDEBUG_SESSION_START=owen
,这里的owen就是IDE key,这个如果使用DBGp proxy
要保证两个key一致,否则无法进行调试。
Chrome插件
Chrome有个插件 – Xdebug helper,右键选项可以设置IDE key(选择other才可以输入自定义ide key)。然后在需要的时候只需要点击插件选择模式即可。
一开始没有那个显示可以从图表右边的扩展插件图标中将XDebug Helper图表拖出来。不能选择模式的话是因为需要有网址才可以选择,如果不行可以重启浏览器,还不行就重启电脑。
相关文章:

php调试配置
错误信息输出 错误日志 nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出࿰…...

Spring架构篇--1 项目演化过程
前言:如今spring微服务以其灵活开发易于维护已基本占领开发占地,项目从一开始并不是这种服务的拆分,是一步步演变成现在的架构; 项目演化之路: 1 单体架构:开发和运维都较简单: 单体架构&am…...
华为OD机试真题Python实现【斗地主 2】真题+解题思路+代码(20222023)
斗地主 2 题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等 其中顺子的出牌规则为,由至少 5 张由小到大连续递增的扑克牌组成 且不能包含2 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,1…...
Intel SIMD: AVX2
AVX2 资料: Intel 内部指令 — AVX和AVX2学习笔记Intel Intrinsics — AVX & AVX2 Learning NotesModule x86 AVX 向量寄存器有三种: 128-bit (XMM forms),AVX2 支持,符号 __m128, __m128d, __m128i256-bit (YMM forms)&a…...

Spring Cloud Nacos源码讲解(二)- Nacos客户端服务注册源码分析
Nacos客户端服务注册源码分析 服务注册信息 我们从Nacos-Client开始说起,那么说到客户端就涉及到服务注册,我们先了解一下Nacos客户端都会将什么信息传递给服务器,我们直接从Nacos Client项目的NamingTest说起 public class NamingTest…...
华为OD机试 - 停车场最大距离(Python) | 机试题+算法思路+考点+代码解析 【2023】
停车场最大距离 题目 停车场有一横排车位0代表没有停车,1代表有车. 至少停了一辆车在车位上,也至少有一个空位没有停车. 为防止刮蹭,需为停车人找到一个车位 使得停车人的车最近的车辆的距离是最大的 返回此时的最大距离 输入 一个用半角逗号分割的停车标识字符串,停车标识为…...

RPC(2)------ Netty(NIO) + 多种序列化协议 + JDK动态代理实现
依赖包解释 Guava 包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string process…...

CAN现场总线基础知识总结,看这一篇就理清了(CAN是什么,电气属性,CAN通协议等)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…...

盘点全网好评最多的7款团队协同软件,你用过哪款?
能亲自带团队管理项目当然是一件开心和兴奋的事,但是突然成为团队负责人后开始不大适应。如何转换角色,还有自己和团队成员之间在心理、行为等方面的互动也变得很敏感。新手领导上任的过程,是团队秩序再造的过程;是晋升者个人职业…...

Node-RED 3.0升级,新增特性介绍
前言 最近给我的树莓派上的Node-RED(以下简称NR)做了一下升级,从2.x升级到得了3.0。这是一个比较大的版本升级,在用户体验方面,NR有了有很大的提升。下面让我们一起来看一如何升级以及,3.0新增了那些特性 升级3.0 由于之前的NR是直接使用npm来进行安装的,所以此处升级…...

使用带有 Moveit 的深度相机来避免碰撞
文章目录 什么是深度相机?如何将 Kinect 深度相机添加到您的环境中在 Rviz 中可视化深度相机数据在取放场景中使用深度相机将深度相机与您的 Moveit 设置一起使用有很多优势。机器人可以避免未知环境中的碰撞,甚至可以对周围的变化做出反应。然而,将深度相机连接到您的设置并…...

干货复试详细教程——从联系导师→自我介绍的复试教程
文章目录联系导师联系之前的准备联系导师注意自我介绍教育技术领域通用的复试准备其他补充联系导师 确定出分和自己能进复试以后联系。 分两类 科研技能型 低调,如实介绍,不吹不水。就算你很牛啥都会手握核心期刊论文也不太狂 学霸高分型 不要自卑&…...

Java 优化:读取配置文件 “万能方式“ 跨平台,动态获取文件的绝对路径
Java 优化:读取配置文件 “万能方式” 跨平台,动态获取文件的绝对路径 每博一文案 往事不会像烟雾似的飘散,将永远像铅一般沉重地浇铸在心灵的深处。 不过,日常生活的纷繁不会让人专注地沉湎于自己的痛苦 不幸,即使人…...
华为OD机试真题Python实现【最小施肥机能效】真题+解题思路+代码(20222023)
最小施肥机能效 题目 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完...

python基于vue健身房课程预约平台
可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发3 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 django框架 5 3 系统分析 6 3.1…...

Allegro无法看到金属化孔的钻孔的原因和解决办法
Allegro无法看到金属化孔的钻孔的原因和解决办法 用Allegro设计PCB的时候,希望同时看到金属化孔的盘以及钻孔,如下图 但是有时显示效果是这样的,看不到钻孔了 导致无法直观地区分是通孔是还是表贴的盘 如何解决,具体操作如下 点击Setup...
《蓝桥杯每日一题》并查集·AcWing1249. 亲戚
1.题目描述或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞…...

亚马逊云科技依托人工智能进行游戏数据分析,解决游戏行业痛点,助力游戏增长
前言 据互联网数据显示:2014 年我国游戏行业用户规模为 517.31 百万人,直至 2020 年达 554.79 百万人;同时,2020 年,我国游戏市场实际销售收入 2786.87 亿元,比 2019 年增加了478.1 亿元,…...
为什么不建议用 equals 判断对象相等?
一直以为这个方法是java8的,今天才知道是是1.7的时候,然后翻了一下源码。 这片文章中会总结一下与a.equals(b)的区别,然后对源码做一个小分析。 一,值是null的情况: 1.a.equals(b), a 是null, 抛出NullPointExcepti…...

手写线程池实例并测试
前言:在之前的文章中介绍过线程池的核心原理,在一次面试中面试官让手写线程池,这块知识忘记的差不多了,因此本篇文章做一个回顾。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...