XDebug不会在http请求后的断点处停止
问题描述:
我正在开发一个应用程序,前端带有AngularJS,后端带有PHP。XDebug不会在http请求后的断点处停止
他们与REST沟通。
前端实现浏览器同步以刷新更新。
我在PhpStorm中用XDEBUG调试PHP代码。
在我们开始使用BroswerSync之前,PHP代码会在请求发送到服务器之后暂停一个断点,现在它不工作......我们使用其他工具(如Postman和PhpStorm中的内部REST客户端,而代码确实设法暂停,但不是来自Angular本身。
答
我试图找到一种方法来轻松地一次又一次重复的HTTP请求,所以我可以调试多次无填充相同的数据(如表)...
我就开GET在新标签要求(通过右键单击Chrome开发网络选项卡中的请求),断点可以工作,但不会发出POST请求。
不知何故,在堆栈溢出的帮助下,我发现将Chrome Dev的请求复制为CURL并添加--cookie "XDEBUG_SESSION=PHPSTORM"
会触发XDebug。
通常,要从Chrome中触发XDebug,您需要安装“XDebug Helper”。这导致我得出结论,其中一个“XDebug Helper”函数是添加一个将触发XDebug的cookie。
此问题的解决方案是将withCredentials: true
添加到Angular HTTP请求中。 所以它看起来像:
$http.get(path, {withCredentials: true});
var options = {
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
withCredentials: true
}
$http.post(path, params, options);
而且,还需要更新服务器端的响应头:你需要设置原点根据您发送
header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");
注请求。这也增加了一层安全性,因为在此之前我们只会使用*
并接受来自任何地方的请求。
为多个主机的配置更容易:
$http_origin = $_SERVER['HTTP_ORIGIN'];
//The static method returns an array of hosts
if (in_array($http_origin, Config::getAllowedOrigins()))
{
header("Access-Control-Allow-Origin: $http_origin");
header("Access-Control-Allow-Credentials: true");
}
希望这个解释会有所帮助!