使用xDebug调试SOAP服务

时间:2013-12-06 11:58:00

标签: php soap xdebug

有没有办法调试我们理想发布的SOAP服务,并将其集成到IDE中,允许我逐步完成代码。

2 个答案:

答案 0 :(得分:15)

我从this article获得了一些灵感,我提出了一个解决方案,允许我从SoapUI调用服务并逐步执行IDE中的代码(PhpStorm

关键是要改变生成的WSDL的一部分,特别是<soap:address>节点。这有一个location属性,我追加?XDEBUG_SESSION_START=netbeans-xdebug。显然,netbeans-xdebug必须是您在调试环境中设置的IDE Key。

我是通过在渲染WSDL并执行preg_replace()之前捕获它来完成的。

$wsdl = preg_replace('|soap:address location="(.*?)"|','soap:address location="$1' . $ide_key . '"', $wsdl );

答案 1 :(得分:0)

我已经使用 Eclipse IDE、Zend Debugger 和 soapUI 进行了调试,但我想这也适用于 XDebug。

在 Eclipse IDE 中选择您的 soap 服务器端点,然后选择“Debug As” | “PHP Web 应用程序”。对我来说,端点是soapserver.php。这将启动您的默认 Web 浏览器,并将调试参数添加到 URL。所以 URL 将类似于

http://localhost/myproject/soapserver.php?debug_host=127.0.0.1&debug_fastfile=1&start_debug=1&debug_port=10137&use_remote=1&original_url=http%3A%2F%2Flocalhost%2Fmyproject%2Fsoapserver.php&ZRayDisable=1&send_sess_end=1&debug_stop=1&debug_start_session=1&debug_no_cache=1621452020087&debug_session_id=1000

现在将 URL 从浏览器复制到 soapUI 的请求中。启动请求,调试器会在soapserver.php 的第一行停止执行php 代码。您也可以设置其他断点。

这种方法的唯一缺点是调试器仅在请求处于活动状态时才处于活动状态。当超时发生时,调试器也会停止。我试图在没有运气的情况下更改soapUI 中的请求超时。可能需要更改 php 的soapserver 的超时时间,但我不知道该怎么做。