使用xdebug调试docker中php代码, xdebug的配置快速上手教程, 以及配置和调试时常见坑的解决办法.

使用xdebug调试docker中的php代码的配置 和 使用xdebug调试本地代码或者远程服务器上的代码的配置是有不一样的. 以下教程是带你快速上手使用xdebug调试docker中的代码并帮你避开一些坑.

前提: 你docker中代码已经能正常跑起来并访问.

1.在xdbug中安装xdebug.

非常棒的安转指导网址: https://xdebug.org/wizard.php   ,这是个非常棒的安装指导网站,只要按照上面一步一步走都能成功安装的,缺点就是都是英文,本文着重讲怎么配置. 怎么安装的其实那个网站已经列得很详细也很简单, 大致步骤就是:将echo phpinfo();输出的整个内容复制到该网站中,该网站会解析你的phpinfo信息,并提供合适xdebug给你下载,你下载xdebug后解压并执行make && make install, 此时就会生成个xdebug.so文件, 然后在php.ini文件中引入该文件即是安转成功.

2. xdebug的配置(本文将着重介绍)

 2.1 在docker]中, 进入php的配置文件php.ini,增加如下配置: 

;引入xdebug扩展
zend_extension="/usr/local/php7/lib/php/20170718/xdebug.so"
;开启远程调试
xdebug.remote_enable=1
;据说connect_back开启会有问题
;xdebug.remote_connect_back=1
;关键配置.该地址为你宿主机(也就是你电脑)的ip地址
xdebug.remote_host=192.168.43.219
xdebug.remote_handler=dbgp
;xdebug.remote_mode="req"
;关键.端口可以自己设置但是注意要选择没被占用的.后面phpstormde的prot要填写这个端口号
xdebug.remote_port=9050
;后面phpstorm的idekey的值要和这个一样
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/log/xdebug.log

记得php-fpm重载下以便使配置生效.

2.2 宿主机上配置. 进入phpstorm的设置(mac上的入口为phpstorm->preferences, window貌似是叫setting). 设置9050端口

设置idekey为PHPSTORM

添加一个servers(此处假设你的代码访问网址为www.test.com,端口为默认的80)

配置一个debug配置

2.3 开始调试,之后你在浏览器上访问 http://www.test.com?XDEBUG_SESSION_START=PHPSTORM 就能进入到你打的断点. 

如果访问不带?XDEBUG_SESSION_START=PHPSTORM参数是不是触发调试模式,如果嫌每次带这个参数麻烦, 谷歌浏览器可以去下个xdebug helper(它的作用其实就是在你访问网站时在cookie上带上上面那串参数)

 至此, 你就可以愉快的xdebug.

3.常见的问题

 3.1 时间太长出现502报错?

  502报错为php方面的报错, 一般为超出了php脚本最大执行时间, 可以设置php-fpm配置,将字段request_terminate_timeout 设置长点.

 3.2 出现504报错?

  首先明确该错误是nginx报错, 所以问题是出现nginx上. 
  进入docker, 在nginx的配置文件上 http 块上加入如下:

#其中read_timeout是关键,send_timeout和connect_timeout不配置一般也是可以的
fastcgi_read_timeout 3600s; 
fastcgi_send_timeout 3600s; 
fastcgi_connect_timeout 3600s;

  记得重启或者重载下nginx,不然生效个毛线啊

   这种情况nginx是fastcgi_pass(fastcgi转发), 还有种情况是nginx是作为proxy_pass. (这种要配置proxy_read_timeout 3600s; 不然也会超时)

   像nginx作为proxy_pass情况我举个例子, 比如我docker上的项目是nginx + php-fpm模式, nginx就是将请求fastcgi_pass给fpm监听的端口一般9000. 而因为项目太多80被用了,所以nginx只能监听85端口, 那么我在宿主机访问docker项目不想每次访问都要带上端口号, 想访问www.test85.com就能访问到docker中的项目, 所以此时你需要在宿主机上加层nginx, 然后配置所有www.test85.com的请求都proxy_pass到85端口上.  为此这种情况下的xdebug调试,两个nginx都有可能出现504超时. 所以宿主机上的nginx的http块上要加上proxy_read_timeout 3600s;  而docker上nginx要加上fastcgi_read_timeout 3600s来分别防止他们的超时.  希望这个例子你们能更清楚nginx超时504错误要怎么配置会更加明了.

猜你喜欢

转载自blog.csdn.net/weixin_37281289/article/details/106178718