Jer*_*nch 13 php xdebug soap-client
我正在编写一个Web应用程序,允许用户指定SoapClient的URL.我想验证php可以在用户提交表单时连接到客户端.我可以通过try catch或set_error_handler(或两者的某种组合)来做到这一点.但是,对于致命错误,这似乎是不可能的.有没有办法让SoapClent测试一个不会引发不可恢复错误的URL?
Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://example.com/wibble'
Run Code Online (Sandbox Code Playgroud)
我希望它标记一个错误,因为URL不存在,但我希望能够捕获它.
否则我想我可以尝试自己下载并验证URL,但我认为可以从SoapClient中做到这一点.
这应该是致命错误吗?
编辑
在阅读了rogeriopvl的回答之后,我重申我应该说我已经尝试了soapclient构造函数的"例外"选项,并且(在绝望中)使用了use-soap-error-handler函数.
Hen*_*pel 23
你在用xdebug吗?根据这个PHP错误报告和讨论,至少从PHP 5.1开始,这个问题已得到解决,但是这个xdebug错误会导致"异常转换的致命错误",其方式是不会生成异常并导致致命错误"泄漏" .
我可以在本地重现这个,启用xdebug:
try {
$soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
$exceptionMessage = t($e->getMessage());
print_r($exceptionMessage);
}
Run Code Online (Sandbox Code Playgroud)
这给了我你描述的致命错误,甚至没有输入catch子句:
Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'
Run Code Online (Sandbox Code Playgroud)
如果我在调用之前禁用xdebug它可以工作:
xdebug_disable();
try {
$soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
$exceptionMessage = t($e->getMessage());
print_r($exceptionMessage);
}
Run Code Online (Sandbox Code Playgroud)
这会按预期触发异常,并在catch子句中获得一个正确的SoapFault对象,并带有以下消息:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'
Run Code Online (Sandbox Code Playgroud)
所以基本上异常的工作与广告一样.如果它们不适用于您的情况,您可能会遇到xdebug错误,或者与其他第三方组件有类似问题.
| 归档时间: |
|
| 查看次数: |
12383 次 |
| 最近记录: |