Xdebug远程服务器无法连接

时间:2011-11-08 11:36:48

标签: php netbeans xdebug

我希望使用不同计算机的团队能够在远程服务器上调试PHP,但我很难让Xdebug在NetBeans 7.0.1中工作。我尝试了许多在线提示,但无济于事。

为了记录,我在运行WampServer的Windows 7计算机上成功安装了Xdebug 本地。所以我可以在NetBeans中使用断点调试PHP,前提是我将项目属性 - >运行配置 - >运行属性设置为本地网站。但是,如上所述,我的目标是在远程网站上的NetBeans中进行调试。

我的服务器是Ubuntu 11.04计算机。我使用http://www.xdebug.org/find-binary.php的输出将正确的二进制文件放在机器上。我修改了我可以找到的所有php.ini个文件(在php5/apache2php5/cli目录中)以包含这些行:

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

如果我查看phpinfo.php网页,则会说:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans

所以Xdebug似乎确实安装得很好。不过,当我尝试在NetBeans中进行调试时,我会收到无休止的状态栏消息 Waiting For Connection(netbeans-xdebug)。当我按下停止按钮时,我得到在X秒内未检测到xdebug的连接。原因可能是xdebug未安装或未正确配置

也许我在这里混淆了服务器设置的本地设置? A post表示xdebug.remote_host应设置为运行NetBeans的计算机的 IP ,但我希望团队能够使用具有不同IP地址的计算机进行调试。问题可能是端口9000,但我检查过它没有被阻止。

任何可以澄清这一点的帮助都将不胜感激!

10 个答案:

答案 0 :(得分:55)

运行PHP(和XDebug)的服务器需要能够连接到您的工作站/桌面。

Diagram

因此,您需要相应地设置服务器,方法是告诉它连接到特定的 IP地址(xdebug.remote_host)或自动“连接回”({{1 }})。但后者有一些安全隐患。这些概述为in the manual

答案 1 :(得分:16)

关键指令是:

xdebug.remote_connect_back = On

这允许Web服务器连接到要求调试会话的任何计算机。这样您就不必对IP地址进行硬编码并且能够共享Xdebug。该指令在早期版本中不存在,并且通常在教程和文档中省略。

您还需要验证每台客户端计算机是否接受到端口9000(xdebug.remote_port)的传入连接。这包括配置防火墙并确保调试器客户端已启动并正在运行

答案 2 :(得分:15)

对我来说,xdebug.remote_connect_back = On不起作用。 我所做的是在我的客户机上设置ssh端口转发。

远程计算机上的xdebug配置:

xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_handler = dbgp
xdebug.remote_mode = req

客户端计算机上的转发端口:

ssh -g -N -lusername -R9000:127.0.0.1:9000 [remote.host.ip]

必须允许远程计算机上的shell访问。

答案 3 :(得分:6)

就我而言,这些命令帮助了我:

./<module name>/client

注意:即使由于'xdebug.remote_autostart = 1'而不存在GET / POST / COOKIE变量,调试器也能正常工作

答案 4 :(得分:3)

用于远程调试的Xdebug 3升级指南

摘要:https://xdebug.org/docs/upgrade_guide

所需的PHP配置更改/添加:

  • 删除xdebug.remote_enable | default_enable | profiler_enable | auto_trace | coverage_enable
  • 添加xdebug.mode=debug或使用develop | coverage | gcstats | profile
  • 添加xdebug.start_with_request=yes
  • xdebug.remote_autostart->由xdebug.mode=debug替换为xdebug.start_with_request=yes
  • xdebug.remote_host->替换为xdebug.client_host
  • xdebug.remote_port->替换为xdebug.client_port或在IDE设置中使用新的默认设置(下面有更多内容)

新配置示例

xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.idekey=myKey
xdebug.client_host=x.y.z.a
xdebug.remote_handler=dbgp

哪里

  • x.y.z.a = your IDE host
  • myKey = your configured key in the IDE

所需的IDE配置更改/添加:

  • set-> remote_port = 9003(xdebug的新默认端口)或在上述配置中将xdebug.client_port设置为9000,以保留旧的默认值

答案 5 :(得分:1)

感谢服务器端的xdebug.remote_connect_back = On php.ini
此外,我必须使用this plugin Chrome才能在PhpStorm中启动调试会话

答案 6 :(得分:1)

在尝试配置docker时,我遇到过几次相同的问题,多次摸索后,我意识到这是解决问题的方法。因此,我决定将其放在这里,作为我未来自我的答案。

大多数时候,Dockerfile将此语句添加到php.ini中:

@Service
class DbService {
   @Transactional
   public void doInDb() {}
}

@Service
class DomainService {
    @Autowired DbService dbService;
    @Autowired FsService fsService;
    ...
    public void doDbAndFs() {
       try {
         fsService.saveFiles();
         dbService.doInDb();
       } catch (Exception e) {
          fsService.cleanUp();
       }

    }
}

这将使一切看起来都还不错,但由于某种原因,PHP风暴实际上没有捕获任何调试连接。用以下内容替换上面的行会立即为我解决问题。

xdebug.remote_connect_back     = on

当然,在那之后您仍然需要运行: xdebug.remote_connect_back = 0 xdebug.remote_host = host.docker.internal $ docker-compose down$ docker-compose build

答案 7 :(得分:1)

布拉德对 xdebug 3 的回答非常正确;谢谢...就我而言,我使用 PHP7.3.13 安装了 Win 10, Netbeans 8.2 和 IIS 10(eindia.com 是众多网站之一)(浏览器是带有 netbeans 扩展和 FF 的 Chrome)...并且没有 Xampp、Wampp、Lampp...然后我安装了 xdebug(使用向导)和配置如下:

[xDebug]
zend_extension = "C:\Program Files\PHP\v7.3\ext\php_xdebug-3.0.2-7.3-vc15-nts-x86_64.dll"
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler="dbgp"
xdebug.client_host="eindia.com"
;xdebug.remote_host=192.168.1.5
;xdebug.remote_connect_back=1
xdebug.client_port=9003
;xdebug.remote_mode=req
xdebug.idekey="netbeans-xdebug"  

它的工作原理就像魅力一样。

答案 8 :(得分:0)

你开始调试的页面扩展名是什么?我记得我疯了,度过了不眠之夜,XDebug的所有设置都很棒。问题是我没有开始.PHP,而是开始使用.HTML

如果您正尝试使用.PHP文件启动调试。

答案 9 :(得分:0)

您需要设置:

xdebug.remote_host=192.168.1.104

192.168.1.104是客户端的ip,您使用IDE