本文介绍需要有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没有被设置,它将默认使用xdebugif [ -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