我想在这里提及有关xdebug.remote_host的内容
xdebug.remote_host="127.0.0.1"
无效。在某些情况下可能会起作用,但是引号也会引起问题。大多数人在引号中使用IP地址时都没有问题,但这开了一个不好的先例。它使人们认为,如果要使用主机名或URL,则需要将其用引号引起来。这是不正确的,引号中的网址不起作用。
如果要使用URL进行调试,可以通过将URL放在等号之后来实现,如下所示:
xdebug.remote_host=subdomain.mydomain.com
我还要提及的是,如果您有端口号,请不要添加它。这不起作用:
xdebug.remote_host=subdomain.mydomain.com:9000
这是您想做的:
xdebug.remote_host=subdomain.mydomain.com
xdebug.remote_port=9000
如果这样做,我也提醒您确保已禁用remote_connect_back。像这样:
xdebug.remote_connect_back=0
或者您可以完全省略它,例如:
;xdebug.remote_connect_back=1
如果启用了remote_connect_back,它将尝试从传入连接中拉出您的IP地址,而忽略remote_host和端口设置。
Xdebug使用普通的旧TCP建立连接。这不是HTTP。这意味着像Fiddler这样的工具将不会显示任何数据包或有关调试的信息。如果需要调试,并查看服务器是否正在调用IDE,则有几种检查方法。
Wireshark将允许您查看TCP流量。同样,如果您使用的是Windows,Microsoft Message Analyzer也可以监视TCP。
但是,如果您要做的就是删除IDE,这可能是导致远程调试问题的原因,那么我建议您启动本地TCP服务器。
这是一个很棒的免费Java程序,用于启动TCP服务器:http : //sockettest.sourceforge.net/
在“ IP地址”部分中,仅列出127.0.0.1或将其保留为0.0.0.0。然后列出端口号,对于xdebug,端口号通常默认为9000。
TCP服务器运行后,使用xdebug_break()打开远程网页;函数调用。这将告诉远程服务器上的xdebug在您在php.ini中列出的任何服务器和端口上开始调试。
观察套接字服务器,看看是否获得连接。发送的第一个数据应如下所示:
<init appid="APPID"
idekey="IDE_KEY"
session="DBGP_COOKIE"
thread="THREAD_ID"
parent="PARENT_APPID"
language="LANGUAGE_NAME"
protocol_version="1.0"
fileuri="file://path/to/file">
如果您已经做到了,远程调试就可以了!只需停止服务器并设置您的IDE即可监听该端口!
如果您像我们大多数人一样,则您的开发人员机器位于具有NAT的路由器之后。这意味着您办公室中的每个人都有相同的公用IP地址。这是一个问题,因为xdebug与该IP地址联系以开始调试时,它击中了路由器,而不是计算机。可以将路由器配置为将某些端口号传递给单独的计算机,但是您可能不希望这样做,因为该端口将是开放的,直到您将路由器设置更改回。
另一种选择是使用SSH。这里有一个很好的例子: http //stuporglue.org/setting-up-xdebug-with-netbeans-on-windows-with-a-remote-apache-server/#attachment_1305
我的首选是使用Ngrok。Ngrok是重定向HTTP,https和TCP通信的好工具。为了使用TCP重定向功能,您需要注册一个免费帐户。
注册帐户并将API密钥添加到计算机后,请在IDE所在的计算机上运行以下命令:
ngrok tcp 9000
这将打开从ngrok服务器到您在其上运行命令的任何计算机的tcp(不是http)隧道。我正在使用端口9000,如果将IDE配置为其他Xdebug端口,则可以更改此端口。
这是您应该看到的:
您将需要查看打开的TCP隧道的URL。在此示例中是:
0.tcp.ngrok.io:14904
对于此会话,服务器上的Xdebug设置应为:
xdebug.remote_host=0.tcp.ngrok.io
xdebug.remote_port=14904
每次启动ngrok时,URL和端口都会更改。如果要使用相同的URL和端口,则必须升级到付费帐户。对php.ini进行更改后,请确保重新启动apache。