PhpStorm 配置 Xdebug 3,及常见问题

2022-11-18 15:07:10 浏览数 (1)

做PHP开发也很多年了,Xdebug也配过很多次,但总觉得不是刚需,感觉有没有都行;另一方面它配置复杂(新方法很简单),每个项目都得配一遍(新方法也避免不了),并且在公司配完,回到家还得修改hosts 中的ip(新方法不需要)。种种原因,使用Xdebug的习惯并没有延续下来。直到我近日接触了yii2中的事件,比如:

代码语言:javascript复制
$config = [
    'components' => [
...
    ],
    'on beforeRequest' => function($event) {
        yiibaseEvent::on(yiidbBaseActiveRecord::class,
            yiidbBaseActiveRecord::EVENT_AFTER_FIND, ['commonmodelsOperate', 'RecordOperateInfo']);
    },
]

假如要调试commonmodelsOperate中的RecordOperateInfo,如果没有Xdebug,你可能会先写一个临时控制器,再调一下这个model方法,当然也行。但有了Xdebug就方便很多了,你可以直接在model方法中下断点。

下面看下如何配置

配置

这里我的PHP环境是基于docker的,非docker的也大同小异

修改php.ini

代码语言:javascript复制
[xdebug]
zend_extension = xdebug.so
xdebug.mode=debug
xdebug.client_host=host.docker.internal
;xdebug.discover_client_host=yes
xdebug.client_port=9003
xdebug.start_with_request=yes

注意,你的php环境用的docker-compose.yml可能需要修改一下,允许容器内通过localhost访问宿主机(是可能,未验证!)

代码语言:javascript复制
  docker-php-fpm:
    image: php:1.1-work
    hostname: php-fpm
    extra_hosts: #允许容器内通过localhost访问宿主机
      - host.docker.internal:host-gateway
    networks:
      - web-network

使用

PhpStorm 要配置的很少,直接开始

第一步

第二步

访问接口,触发事件。这时你会看到如下弹窗

第三步

打开 PhpStorm 的设置,如下

第四步

再次访问接口,就成功了

常见问题

如果不成功,第一个需要确认的是9003端口是否可用

注意,先开启监听,如下

然后在本机和php容器内分别执行

代码语言:javascript复制
cuiwei@weideMacBook-Pro ~ % telnet 127.0.0.1 9003
root@php-fpm:/var/www/html# telnet host.docker.internal 9003

问题1

通常我们配置nginx的时候,想通过ip访问,会这么配

代码语言:javascript复制
server {
    listen      8080;
    server_name _;
    index index.php index.html index.htm default.html;
    root        /var/www;
}

这种想用xdebug调试就不行了(没深究,可能有其他方式),需要把server_name配置成具体的,比如localhost

问题2

有时候我们会通过代理的方式让多个项目共用一个域名,比如:前缀为xx.com/api/user的反向代理到8090端口,前缀为xx.com/api/admin的反向代理到8091端口。这种想访问某个接口(xx.com/api/user/1)来调试的也不行,xdebug只会识别出端口号为8090的server_name,这时servername的值肯定为``。所以这种情况就先别用代理了

总结

这种配置方式还是挺简单的,每个项目只需配置一下容器内的根目录即可。

注意,上文提到的yii.cw.net是我通过修改hosts自定义的域名

代码语言:javascript复制
cuiwei@weideMacBook-Pro ~ % cat /etc/hosts
127.0.0.1 yii.cw.net

这样,不管你怎么切换网络都不影响

0 人点赞