错误信息输出

错误日志

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

版权声明:本文为welsey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/welsey/p/17143843.html