2011-07-07 14 views
10

W PHP, jeśli starają się wystąpienie nowego SoapClient i WSDL nie jest dostępny (serwer w dół lub cokolwiek), PHP błąd krytyczny jest wyrzucany:SoapClient błąd awaryjna w PHP

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from ' http://example.com/servlet/app/SomeService?wsdl ' : failed to load external entity " http://example.com/servlet/app/SomeService?wsdl "

krytyczne błędy PHP, o ile mi wiadomo, nie można odzyskać.

Czy istnieje sposób, aby z tego zrezygnować? Czy można uniknąć tego fatalnego błędu?


Edit: powinienem powiedzieć, że używam na PHP 5.2, jeśli czyni żadnej różnicy.

Odpowiedz

11

ta została już omówiona:

sam Rasmus zaproponował następujące rozwiązanie:

<?php 
try { 
    $x = @new SoapClient("non-existent.wsdl",array("exceptions" => 1)); 
} catch (SoapFault $E) { 
    echo $E->faultstring; 
} 
echo "ok\n"; 
+0

Niestety to rozwiązanie nie działa w PHP 5.3.10. – pthurmond

+0

Skopiowałem to dosłownie do nowego pliku i nie dociera do echa "Ok"; część. – pthurmond

+2

Ale kiedy spojrzałem w dół, znalazłem notatki o wyłączeniu xdebug i to pozwoliło działać. – pthurmond

0

zobaczyć ten wątek How do I catch a PHP Fatal Error

Zasadniczo nie można odzyskać z fatalnym błędem, ale można zapewnić lepsze doświadczenie użytkownika podczas rejestracji funkcję wyłączania

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

prawda, ale szukam, aby uniknąć błędu krytycznego w całości. –

+0

Najlepsza praktyka to próba złapania na pewno. – JDuarteDJ

Powiązane problemy