无php.ini权限时,如何用Xdebug 3.1.5远程调试PHP?
解决思路
1. 先让本地覆盖的配置生效
你贴出的ini_set代码全被注释了(//开头),等于没做任何配置修改,必须取消注释才能启用Xdebug的调试功能:
error_reporting(E_ALL); ini_set('xdebug.mode', 'develop,debug'); ini_set('xdebug.client_port', '9003'); ini_set('xdebug.start_with_request', 'trigger'); ini_set('xdebug.discover_client_host', false); // 配合反向代理,关闭自动发现更稳定 ini_set('xdebug.client_host', 'localhost'); ini_set('xdebug.show_error_trace', 1);
2. 验证SSH反向代理是否正常
连接服务器后,执行telnet localhost 9003:
- 如果能连通,说明代理生效;
- 如果提示连接被拒绝,检查本地IDE是否已监听9003端口,或者SSH命令的端口、用户名/域名是否写错,同时确认本地防火墙没拦截9003端口的入站请求。
3. 核对服务器Xdebug的实际运行配置
结合你提供的phpinfo截图,重点确认以下参数:
xdebug.mode:必须包含debug或developxdebug.client_port:是否为9003xdebug.client_host:是否设为localhost(适配反向代理)xdebug.start_with_request:如果是trigger,必须手动触发调试
4. 正确触发调试请求
当xdebug.start_with_request设为trigger时,需要手动触发:
- 浏览器访问时,URL末尾追加
?XDEBUG_TRIGGER=1 - 用接口工具发送请求时,添加请求头
XDEBUG_TRIGGER: 1 - 执行CLI脚本时,加环境变量:
XDEBUG_TRIGGER=1 php your_script.php
5. 开启Xdebug日志定位问题
在服务器上开启日志,能直接看到连接失败的具体原因:
ini_set('xdebug.log', '/tmp/xdebug.log'); ini_set('xdebug.log_level', 7); // 最高日志级别,便于排查细节
执行请求后查看/tmp/xdebug.log,日志会显示Xdebug尝试连接客户端的完整过程,比如主机无法解析、端口被拒绝等信息。
内容的提问来源于stack exchange,提问作者Edison
相关产品推荐
相关产品推荐

