我按照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时阅读了有关错误/问题的几个注释。我查了一下,不是。
答案 0 :(得分:0)
好吧,我明白了。这解决了我的问题:
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作为证据),但是有例外情况'设置为1它应该做到这一点...抛出异常,而不是致命的。从php的角度来看,网络错误永远不会被认为是致命的。但我想这只是我的意见