如何在VSCode内置浏览器中设置XDEBUG_SESSION调试PHP
我刚发现VSCode有内置浏览器,想用它调试PHP代码,但不知道怎么在这个浏览器会话中设置XDEBUG_SESSION Cookie,以下是可行的解决方法和我的相关配置文件:
解决方式
方式1:URL参数快速触发
不用手动设置Cookie,直接在访问的站点URL末尾加上?XDEBUG_SESSION=VSCODE,比如访问http://localhost:8080/?XDEBUG_SESSION=VSCODE。Xdebug会自动识别这个参数,生成并设置对应的Cookie,后续所有请求都会带上调试会话标识。
方式2:配置VSCode调试监听自动连接
在VSCode的.vscode/launch.json里添加PHP调试配置,确保路径映射和端口与你的环境匹配:
{ "version": "0.2.0", "configurations": [ { "name": "监听Xdebug请求", "type": "php", "request": "launch", "port": 9003, // Xdebug 3默认端口,和xdebug.ini配置一致即可 "pathMappings": { "/var/www/html": "${workspaceFolder}" // 容器内代码路径对应本地项目根目录 } } ] }
启动这个调试监听后,用内置浏览器访问站点,Xdebug会自动连接VSCode的调试器,无需手动处理Cookie。
方式3:临时脚本设置Cookie
如果需要持久化Cookie,可以写个简单的PHP脚本:
创建set_xdebug_cookie.php文件,放到WordPress根目录(容器内/var/www/html路径):
<?php setcookie('XDEBUG_SESSION', 'VSCODE', 0, '/'); header('Location: /'); ?>
用内置浏览器访问http://localhost:8080/set_xdebug_cookie.php,脚本会自动设置Cookie并跳转到主页,后续请求都会带上这个Cookie。
我的相关配置文件
compose.yaml
name: ${project} volumes: db: networks: default: name: ${project} driver: bridge services: db: image: mariadb container_name: ${project}-db environment: MYSQL_RANDOM_ROOT_PASSWORD: '1' MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress volumes: - db:/var/lib/mysql wp: build: ./ container_name: ${project}-wp depends_on: - db environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./app:/var/www/html/wp-content - ./xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini - ./logs:/var/log ports: - 8080:80
Dockerfile
# Source image FROM wordpress:6.9.4-php8.4-apache ARG UPLOADS_INI="/usr/local/etc/php/conf.d/uploads.ini" # Install AND configure Xdebug RUN pecl install xdebug \ && docker-php-ext-enable xdebug \ && echo "upload_max_filesize = 128M" > ${UPLOADS_INI} \ && echo "post_max_size = 128M" >> ${UPLOADS_INI}
xdebug.ini
xdebug.mode = debug # Make sure to restart the container after editing this file xdebug.start_with_request=yes xdebug.client_host = host.docker.internal xdebug.discover_client_host=On xdebug.log_level = 0 xdebug.log = /var/log/xdebug.log xdebug.output_dir = /var/log/xdebug
内容的提问来源于stack exchange,提问作者theking2
相关产品推荐
相关产品推荐

