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限制?
谢谢你的时间和精力,盖伊
我还不能评论,所以我发布这个作为答案.
你能在一个会话中调试多个AJAX请求吗?当您尝试使用cURL进行调试时,您的调试会话是否仍在Eclipse中运行?
关于它如何适用于我的描述:
<?php和其他内容的简单debug.php文件启动调试会话.它在第一行停止,你"继续"它并完成执行.希望有所帮助.
小智 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在哪里找到客户端.希望这有助于节省一些人的时间!