使用XDebug跟踪PHP Web服务页面

Tra*_*Guy 7 php eclipse debugging curl xdebug

我正在使用Eclipse和XDebug开发一个依赖于Web服务的PHP应用程序.我有两种方式使用我的服务的测试页面:AJAX(使用jQuery)和cURL.

我将断点添加到服务页面并启动调试器.当我从AJAX调用服务时,执行在断点处很好地停止,我得到了我的变量,逐步控制等.

但是当我使用cURL调用服务时(即在PHP页面内),断点无法正常工作.即使我打开"Break at first line"调试器选项,我也无法在使用cURL时停止执行.

它是调试器行为吗?我是否需要在cURL电话中添加听筒?改变URL?或者它是XDebug限制?

谢谢你的时间和精力,盖伊

jan*_*pio 9

我还不能评论,所以我发布这个作为答案.

你能在一个会话中调试多个AJAX请求吗?当您尝试使用cURL进行调试时,您的调试会话是否仍在Eclipse中运行?

关于它如何适用于我的描述:

  1. 使用仅包含a <?php和其他内容的简单debug.php文件启动调试会话.它在第一行停止,你"继续"它并完成执行.
  2. 现在使用cURL(或其他浏览器)请求脚本添加?XDEBUG_SESSION_START = ECLIPSE_DBGP到它的路径(我甚至认为这个添加是可选的)
  3. 您的脚本应显示在第一行停止的调试视图中

希望有所帮助.


小智 7

以下是如何在没有浏览器的情况下从Curl触发Xdebugger客户端的提示:

1-从命令行:

curl -H "Cookie: XDEBUG_SESSION=1" http://YOUR-SITE.com/your-script.php
Run Code Online (Sandbox Code Playgroud)

2-来自PHP

<?php 
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, 'http://YOUR-SITE.com/your-script.php');
curl_setopt ($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=1');
curl_exec ($ch);
?>
Run Code Online (Sandbox Code Playgroud)

因此,如果您将"XDEBUG_SESSION = 1"附加到CURL URL并不重要,但必要的是与请求一起发送适当的cookie.


小智 5

我知道这是一个非常古老的主题,但我认为我会将其经验发布给其他可能会遇到它的人,就像我一样,遇到同样的问题.我发现,如果你是远程调试(我总是这样做),你需要在php.ini中更改一些设置以使其工作.以下是适合我的方法:

xdebug.remote_connect_back = false
xdebug.remote_host = {client host name or IP}
Run Code Online (Sandbox Code Playgroud)

第一个设置通常是"true",并告诉xdebug在发出HTTP请求的同一IP地址上查找客户端.但是,在这种情况下,请求来自服务器,因此不起作用.相反,您必须使用第二个设置告诉xdebug在哪里找到客户端.希望这有助于节省一些人的时间!