我已经在PhpStorm上使用Xdebug设置了PHP调试来命中本地主机。 “智能PHP监听”或手动调试运行一切正常,除非我已经到了代码看起来像
的程度$aOptions = array (
'http' => array (
'header' => "Content-Type: application/x-www-form-urlencoded\r\n$sBits",
'method' => 'POST',
'content' => http_build_query ( $aData )
)
);
$rContext = stream_context_create ( $aOptions );
$sResult = file_get_contents ( $sUrl, false, $rContext );
return \json_decode ( $sResult );
并被困在一条线上
$sResult = file_get_contents ( $sUrl, false, $rContext );
带有错误消息
file_get_contents(http://localhost:8888/data/?/Ajax/&q[]=/0/): failed to open stream: HTTP request failed!
但是当我运行调试之后,该行将完成所有工作。
PhpStorm和Xdebug已经设置
xdebug.remote_autostart = 1
任何线索,为什么Xdebug在没有调试的情况下挂起它可以传递任何问题?
答案 0 :(得分:0)
您也在file_get_contents()
来电中调用localhost。它是同一个端口吗?如果xdebug也在那里踢,那么该请求将被保持(将不会完成)并且最终file_get_contents将超时。
是否可以从PHP Storm访问该代码?如果是这样,你应该跳到那。否则尝试使用cookie触发的xdebug运行,因此只有主请求会触发它。
xdebug.remote_autostart = 1
表示当此设置设置为1时,Xdebug将始终尝试启动远程调试会话并尝试连接到客户端,即使GET / POST / COOKIE变量不存在也是如此。 [1]因此表明它可能是这个
我认为您只需要xdebug.remote_enable = 1
然后使用您的浏览器的扩展/插件(大多数浏览器都有启用/禁用xdebug插件)来仅在您的主要请求上触发xdebug
答案 1 :(得分:0)
根据simultaneous debugging sessions的JetBrains文档,我可以通过添加建议的代码来启动子请求的调试器会话来修复它,如下所示
$aOptions = array (
'http' => array (
'header' => "Content-Type: application/x-www-form-urlencoded\r\n$sBits",
'method' => 'POST',
'content' => http_build_query ( $aData )
)
);
$debuggingQuerystring = '';
if (isset($_GET['XDEBUG_SESSION_START'])) { // xdebug
$debuggingQuerystring = '?XDEBUG_SESSION_START=' . $_GET['XDEBUG_SESSION_START'];
}
if (isset($_COOKIE['XDEBUG_SESSION'])) { // xdebug (cookie)
$debuggingQuerystring = '?XDEBUG_SESSION_START=PHPSTORM';
}
$rContext = stream_context_create ( $aOptions );
$sResult = file_get_contents ( $sUrl.$debuggingQuerystring, false, $rContext );
return \json_decode ( $sResult );