我正在按照其API调用外部服务:
$client = new SoapClient($this->apiUrl, array(
'trace' => 1,
'exceptions' => 1,
'encoding' => 'UTF-8'
));
它工作正常……但是后来我有意地对其进行了测试,将apiUrl固定为无效地址,我很震惊地看到服务器500错误,并且此错误在我的日志中显示:
[09-Nov-2015 22:10:07 MST] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://fakeaddress.com/wsdl' : failed to load external entity "http://fakeaddress.com/wsdl"
in /home/account/public_html/test/test.php on line 171
[09-Nov-2015 22:10:08 MST] PHP Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://fakeaddress.com/wsdl' : failed to load external entity "http://fakeaddress.com/wsdl"
in /home/account/public_html/test/test.php:171
这不好。如果该站点由于某种原因而关闭,我需要处理错误,而不仅仅是向用户显示500。我该怎么办?
启用xdebug时,我阅读了一些有关错误/问题的说明。我检查了,不是。
最佳答案
好吧,我知道了。这为我解决了:
try {
$client = @new SoapClient($this->apiUrl, array(
'trace' => 1,
'exceptions' => 1,
'encoding' => 'UTF-8'
));
} catch (SoapFault $E) {
//CODE TO RUN IF ERROR OCCURS GOES HERE
}
虽然我不能说为什么在try/catch中进行包装有效,但确实可以。我相信这确实是一个错误,尽管php坚持认为不是(使用try/catch作为证明),但是将“exceptions”设置为1时,它应该这样做……抛出异常,而不是致命的错误。从php的 Angular 来看,绝不可能将网络错误视为致命的。但我想那只是我的意见
关于php - 如何使SoapClient更正常地失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623426/