php - 如何使SoapClient更正常地失败?

标签 php error-handling soap-client

我正在按照其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/

相关文章:

php - 如何在 php 中强制更改日期时间中的日期

php - 在 PHP/MySQL 中表示一组条件调查表

php - 使用 SoapClient 将 XML 输入发送到 WSDL

javascript - 将 ID 传递给 View ,如何避免可能的操作?

java - java parseInt异常未被捕获

python - ValueError : Classification metrics can't handle a mix of multilabel-indicator on pretrained CNN

angular - 如何使用rxjs运算符多次获取最新值

java - CXF: SOAP 头中的多个部分

java - 从 SOAP 网络服务获得的响应为零

PHP 数组到 JQuery