Bootstrap

docker环境中配置phpstorm php xdebug调试工具

本文介绍需要有docker使用的经验,通过docker compose up 运行项目实现xdebug断点的使用方式

第一步:在php镜像中安装phpxdebug扩展,比如php7.4对应的是xdebug3.1.6

$ docker exec -it 1ec7116eddbc bash
root@1ec7116eddbc:/srv# php --version
PHP 7.4.33 (cli) (built: Sep  4 2023 08:12:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
    with Xdebug v3.1.6, Copyright (c) 2002-2022, by Derick Rethans
root@1ec7116eddbc:/srv# 

第二步:设置项目中的docker-compose.yml

docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址,也就是你本地局域网的ip,也可以直接写成 ip:9100

注意,xdebug。client_host的值应该替换为PhpStorm运行的机器的IP地址,该IP地址可以从Docker容器访问。如果您使用的是Docker for Windows或Docker for Mac,则可以设置xdebug。Client_host到host.docker.internal,它会自动解析到主机的内部地址,让您可以轻松地从容器连接到它。

environment:
    PHP_DEBUG: host.docker.internal:9100

第三步:配置startuop.sh,添加如下代码

有的安装环境是放在php.ini里的道理一样,就是吧xdebug的配置写入docker容器的配置文件里,我这边是放在startup.sh文件里,或者写到Dockerfile里,最终目的就是把参数写到容器里的xdebug配置文件中。
${PHP_DEBUG_IDEKEY:-xdebug} 代表如果PHP_DEBUG_IDEKEY没有被设置,它将默认使用xdebug
if [ -n "$PHP_DEBUG" ]; then
    IFS=':' read -ra ADDR <<< "$PHP_DEBUG"
    { \
      echo 'xdebug.mode=debug,trace' ;\
      echo 'xdebug.start_with_request =yes' ;\
      echo 'xdebug.remote_handler="dbgp"' ;\
      echo "xdebug.idekey=${PHP_DEBUG_IDEKEY:-xdebug}" ;\
      echo "xdebug.client_host=${ADDR[0]:-127.0.0.1}" ;\
      echo "xdebug.client_port=${ADDR[1]:-9000}" ;\
    } >> /etc/php/${PHP_VERSION}/mods-available/xdebug.ini
fi

第四步:运行容器 docker-compose up

然后进入到容器里看下是不是写入成功了,这里每次启动都会写入会有多条还没想好怎么处理

#查看运行的容器
docker ps

#进入容器windows
docker exec -it [CONTAINER ID ] bash

#退出
exit

打印phpinfo 查看配置

第七步 :配置phpstorm IDE

 

 

如果是第一次断点的话,成功的话会收到下面的连接提示

 完成,可以正常打印了

如果遇到类似只能断点入口文件的index.php缺不能断点项目的其他方法,很可能存在错误,一步步的执行会发现有报错

比如这个提示找不到映射文件,坚决方式也很简单,点击蓝色的设置配置提示所说的绝对路径即可 

扩展文档:

phpstorm官方的配置说明:Configure Xdebug | PhpStorm Documentation

Import from Deployment Configuration Dialog | PhpStorm Documentation

xdebug官方文档 Xdebug: Documentation » Function Trace

;