как заставить SoapClient работать более изящно?

1

Я звоню во внешнюю службу в соответствии с их 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 включен. Я проверил, это не так.

Теги:
error-handling
soap-client

1 ответ

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. Но я думаю, что только мое мнение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню