Откат ошибки SoapClient в PHP - PullRequest
10 голосов
/ 07 июля 2011

В PHP, если вы пытаетесь создать новый SoapClient, а WSDL недоступен (сервер выключен или что-то еще), выдается фатальная ошибка PHP:

Неустранимая ошибка: SOAP-ERROR: Синтаксический анализ WSDL: Не удалось загрузить из 'http://example.com/servlet/app/SomeService?wsdl': не удалось загрузить внешнюю сущность "http://example.com/servlet/app/SomeService?wsdl"

Неустранимые ошибки в PHP, покакак я знаю, не подлежат восстановлению.

Есть ли какой-нибудь способ отступления от этого? Можно ли как-нибудь избежать этой фатальной ошибки?


Редактировать: Мне следуетскажем, что я работаю на PHP 5.2, если это имеет какое-либо значение.

Ответы [ 2 ]

13 голосов
/ 07 июля 2011

Это уже обсуждалось:

Сам Расмус предложил следующее решение:

<?php  
try {  
    $x = @new SoapClient("non-existent.wsdl",array("exceptions" => 1));  
} catch (SoapFault $E) {  
    echo $E->faultstring; 
}  
echo "ok\n";
0 голосов
/ 07 июля 2011

См. Эту тему Как мне перехватить PHP-фатальную ошибку

По сути, вы не можете восстановиться после фатальной ошибки, но вы можете предоставить пользователю лучший опыт при регистрации функции выключения

register_shutdown_function('handleShutdown');
function handleShutdown(){
    $error = error_get_last();
    if($error !== NULL){
        echo "Sorry for the inconvenience, an error just occurred.";
    }
}
...