I have set PHP debugging with Xdebug on PhpStorm to hit a localhost. Everything works fine with "smart PHP listening" or manual debug run unless I have got to the point where code looks like
$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 );
and got stuck on a line
$sResult = file_get_contents ( $sUrl, false, $rContext );
with an error message
file_get_contents(http://localhost:8888/data/?/Ajax/&q[]=/0/): failed to open stream: HTTP request failed!
but when I run debug after that line will pass all work fine.
PhpStorm and Xdebug has already set
xdebug.remote_autostart = 1
Any clue why Xdebug hangs on it when without debugging it can pass w/o any issue?
You're calling localhost also in the file_get_contents()
call. Is it the same port? If the xdebug is kicking in there too, then that request will be held (won't complete) and eventually the file_get_contents will time out.
Is that code also accessible from PHP Storm? If so, you should jump in to that. Otherwise try running with cookie-triggered xdebug, so only the main request triggers it.
xdebug.remote_autostart = 1
means When this setting is set to 1, Xdebug will always attempt to start a remote debugging session and try to connect to a client, even if the GET/POST/COOKIE variable was not present. [1] so that indicates it might be this
I think you just want xdebug.remote_enable = 1
then use the extension/plugin for your browser (most browsers have an enable/disable xdebug plugin) to trigger xdebug only on your main request
Based on JetBrains documentation for simultaneous debugging sessions I was able to get it fixed by adding suggested code to start debugger session for child requests as follow
$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 );
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.